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

时间:2018-03-15 13:54:48

标签: c# .net regex

我试图找出给出这样一个模式的正确的正则表达式:

@ abDC email@something.com 123 %&#
@ deFG @@anything 123 = 56
@@ HIjk @@lolol 123 = 78

以下匹配结果:

match 1:
@ abDC email@something.com 123 %&#

match 2:
@ deFG @@anything 123 = 56
@@ HIjk @@lolol 123 = 56

单词:任何以单个" @"开头的字符串;其次是任何字符,包括换行符,空格和" @"本身。

我已尝试使用@{1}.+,但这导致三个单独的匹配而不是预期的两个匹配。请参阅Regex Storm

1 个答案:

答案 0 :(得分:0)

您可以匹配以单个@开头的行,也可以选择包含以下@开头的行:

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

请参阅regex demo

<强>详情

  • (?m) - 多线修改器
  • ^ - 开始行
  • @ - @字符
  • (?!@) - 未跟@
  • [^\r\n]* - \r\n\n
  • 之前的其余部分
  • (?:\r?\n@@[^\r\n]*)* - 零次或多次出现
    • \r?\n - CRLF或LF换行
    • @@ - @@子字符串
    • [^\r\n]* - 其余部分。

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

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