【问题标题】:Regex: any string in a pattern that starts with a specific character, followed by any character正则表达式:模式中以特定字符开头的任何字符串,后跟任何字符
【发布时间】:2018-03-15 23:07:58
【问题描述】:

我正在尝试找出给出如下模式的正确正则表达式:

@abDC 电子邮件@something.com 123 % @deFG @@anything 123 = 56 @@ HIjk @@lolol 123 = 78

结果如下:

比赛1: @abDC 电子邮件@something.com 123 % 比赛2: @deFG @@anything 123 = 56 @@ HIjk @@lolol 123 = 56

在单词中:任何以单个“@”开头后跟任何字符的字符串,包括换行符、空格和“@”本身的出现。

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

【问题讨论】:

标签: c# .net regex


【解决方案1】:

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

(?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@@.*)*

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多