C# 要在字符串中匹配电子邮件的正则表达式
当我想弄明白正则表达式时,我总是头疼 我有以下字符串示例: 三,#我是约翰的会员。smith@domain.com_LThumb.jpg 二,#我是简的会员。doe@domain.com_LThumb.jpg 我需要得到约翰的密码。smith@domain.com从字符串中取出一段。字符串的结尾将始终是C# 要在字符串中匹配电子邮件的正则表达式,c#,regex,C#,Regex,当我想弄明白正则表达式时,我总是头疼 我有以下字符串示例: 三,#我是约翰的会员。smith@domain.com_LThumb.jpg 二,#我是简的会员。doe@domain.com_LThumb.jpg 我需要得到约翰的密码。smith@domain.com从字符串中取出一段。字符串的结尾将始终是\u LThumb.xxx,前缀应始终是xxx\u membership\u 如果有人能拿出一些C#regex来帮我做这件事,我将非常感激\w+?\u会员(\S*?)\u LThumb.jpg \
\u LThumb.xxx
,前缀应始终是xxx\u membership\u
如果有人能拿出一些C#regex来帮我做这件事,我将非常感激\w+?\u会员(\S*?)\u LThumb.jpg
\w # Capture a word character
+ # One or more times
? # Lazily (smallest match possible)
_membership_ # Literal string
( # Start capturing group
\S # Any character that isn't whitespace
* # Zero or more times
? # Lazily (smallest match possible)
) # End capturing group
_LThumb.jpg # Literal string
这包括前面的membership
前缀“应该在那里”,以确保我们只从字符串中提取需要的内容
电子邮件将在比赛的第1组中
@"_membership_(.*?)_LThumb.jpg"
并获得第一个捕获组,该组获取锚之间的所有信息
var email = Regex.Match(
"2;#i_0_.f_membership_jane.doe@domain.com_LThumb.jpg"
, @"_membership_(.*?)_LThumb.jpg"
).Groups[1].ToString();
这张照片
jane.doe@domain.com
为什么要使用正则表达式?子字符串应该有效。是否要处理某人有电子邮件地址的情况_LThumb@gmail.com?请参阅“”。谢谢:)您是否能够分解正则表达式,以便我能稍微理解它?可能需要调整
[\w\.@]*
。我建议这样做:\S*?
这可以做两件事:一,它允许所有有效的电子邮件地址字符匹配,二,它不是贪婪匹配,因此我们可以获得更好的回溯跟踪行为(\w
匹配某些风格的下划线)。@JohnGietzen谢谢,我稍微调整了一下正则表达式。现在,它应该为电子邮件捕获更多的字符。上述两项工作……为什么其中一项看起来比另一项更复杂?“更复杂”的版本限制性更强:它确保电子邮件由字母、数字、点和@``符号组成。不一定是@user257503。dasblinkenlight使用
,它将匹配任何字符,其中我只包括字母、句点和@s。他也不关心\u成员资格
上的前缀,这几乎是无用的,但如果有许多字符串具有相似但不完全相同的模式,它确实可以帮助我们缩小结果范围。@user257503:dasblinkenlight的版本更为宽松*?
将匹配符合LThumb.jpg
的任何内容。因此,给出字符串“3;fl@_membership_#Q*(##b╧½_LThumb.jpg“
它将返回#Q*(#b╧½
。如果您知道这些垃圾永远不会出现在输入中,那么您可能仍然可以使用更简单的模式。好的,dasblinkenlight的版本将允许像“@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”这样的电子邮件地址正常通过。不要混淆搜索和验证。