regex - 如何使用正则表达式从逗号分隔的字符串中提取潜在的电子邮件地址和间距
问题描述
给定以下字符串(提供前导和尾随引号以突出显示前导/尾随空格):
" foo@bar.com , baz@acme, bill@bing.co.uk ,inv liad , thing "
是否可以使用正则表达式来提取(潜在的)电子邮件地址和分隔它们的字符组?理想情况下,比赛将是:
" "
"foo@bar.com"
" , "
"baz@acme"
", "
"bill@bing.co.uk"
", "
"inv liad"
" , "
"thing"
" "
我希望正则表达式可以利用命名组来区分潜在的电子邮件和电子邮件间的间距。我不想在此步骤中验证电子邮件,也不想使用代码进行拆分和修剪。我需要一份潜在匹配列表及其匹配范围。进一步的步骤将执行验证并将颜色突出显示应用于文本字段。
编辑:了解电子邮件组的位置并不是严格要求,因为我只是验证和突出显示潜在的电子邮件。
我正在使用 Xamarin.iOS,因此可以访问 C# 和 Swift/ObjC RE 引擎。TIA。
解决方案
使用 C#,您可以执行类似的操作
string[] result = Regex.Split(
" foo@bar.com , baz@acme, bill@bing.co.uk ,inv liad , thing ",
@"(\b[^,]+\b)"
);
正则表达式匹配任何部分,用您的话来说,是一个潜在的电子邮件地址。在捕获它时拆分它(周围()
)将匹配的项目插入为单独的元素。
比赛解释:
\b A word boundary
[^,]+ Any number of, but at least one, characters that isn't a comma.
\b Another word baoundary
在Regex Storm
上
查看它 在ideone上查看它。
编辑
根据评论调整(问题表明职位不是必需的;)与 . 匹配\b[^,]+\b|[ ,]+
。
输出
(0, 2) | |
(2, 11) |foo@bar.com|
(13, 4) | , |
(17, 8) |baz@acme|
(25, 2) |, |
(27, 15) |bill@bing.co.uk|
(42, 2) | ,|
(44, 8) |inv liad|
(52, 3) | , |
(55, 5) |thing|
(60, 2) | |
使用 JS的插图:
var sInput = ' foo@bar.com , baz@acme, bill@bing.co.uk ,inv liad , thing ',
re = /\b[^,]+\b|[ ,]+/g,
m;
while ((m = re.exec(sInput)) !== null) {
console.log(`(${m.index},${re.lastIndex-m.index}) |${m[0]}|`);
}
推荐阅读
- javascript - 如何等待来自 localStorage 的值?
- ssl - 我的 API 与 Chrome 一起使用,但不适用于其他任何东西
- php - 在 mysql 中向 PDO 查询添加字段
- docker - E: 包 'mysql-client' 在 dockerfile 执行时没有安装候选
- c - 如何释放双指针?
- django - TypeError: __init__() 得到了一个意外的关键字参数“验证器”
- sql - sp_spaceused返回的表使用空间(数据字段)的结果与导出到csv后的空间不一致
- sql-server - CREATE FUNCTION IN SQL select into
- gson - 如何为 Gson 反序列化创建一个通用类
- google-sheets - 我可以限制查询公式中特定列字符的长度吗?