正则表达式:以特定字符开头,后跟任意字符的模式中的任何字符串

3
我正在试图找出正确的正则表达式,以便匹配以下模式:
@ abDC email@something.com 123 %&# @ deFG @@anything 123 = 56 @@ HIjk @@lolol 123 = 78
结果应该匹配如下内容:
匹配1:
@ abDC email@something.com 123 %&#
匹配2: @ deFG @@anything 123 = 56 @@ HIjk @@lolol 123 = 56
描述:以单个“@”开头,后跟任何字符(包括换行符、空格和“@”本身)的任意字符串。
已尝试使用“@{1}.+”,但结果是三个单独的匹配,而不是预期的两个。请参见Regex Storm

1
"{1}" 是多余的,因为这是默认行为。 - ctwheels
^(@.+)\n*([\s\S]*)是什么意思? - ctwheels
$@.* 尝试一下,也许会有所收获。 - Agent_Orange
1个回答

0

您可以匹配以单个@开头并且下面可能包含以双@开头的行:

(?m)^@(?!@)[^\r\n]*(?:\r?\n@@[^\r\n]*)*

请查看正则表达式演示

详情

  • (?m) - 多行修饰符
  • ^ - 行首
  • @ - @ 字符
  • (?!@) - 不跟随 @
  • [^\r\n]* - 在 \r\n\n 之前的其余部分
  • (?:\r?\n@@[^\r\n]*)* - 零个或多个出现次数
    • \r?\n - CRLF 或 LF 换行符
    • @@ - @@ 子字符串
    • [^\r\n]* - 其余部分。

请注意,使用 [^\r\n]* 而不是 .* 只是因为在 .NET 正则表达式中,. 匹配 CR。 如果这不重要,您可以使用

(?m)^@(?!@).*(?:\n@@.*)*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接