3

当我试图找出正则表达式时,我总是头疼。

我有以下字符串示例:

3;#i_0_.f_membership_john.smith@domain.com_LThumb.jpg

2;#i_0_.f_membership_jane.doe@domain.com_LThumb.jpg

我需要john.smith@domain.com从字符串中取出那块。字符串的结尾将始终为_LThumb.xxx,前缀始终为xxx_membership_.

如果有人能想出一些 C# 正则表达式来帮助我解决这个问题,我将不胜感激

4

2 回答 2

4

\w+?_membership_(\S*?)_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 组中。

您可以在 Regexr 使用正则表达式

于 2012-06-26T20:49:06.537 回答
3

正则表达式在这种情况下应该没问题:使用"_membership_""_LThumb.jpg"作为你的锚,像这样

@"_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
于 2012-06-26T20:49:35.850 回答