Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要在字符串中匹配电子邮件的正则表达式_C#_Regex - Fatal编程技术网

C# 要在字符串中匹配电子邮件的正则表达式

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 \

当我想弄明白正则表达式时,我总是头疼

我有以下字符串示例:

三,#我是约翰的会员。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

\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的版本将允许像“@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”这样的电子邮件地址正常通过。不要混淆搜索和验证。