【问题标题】:Regex - Does not contain certain characters except for end正则表达式 - 不包含除 end 之外的某些字符
【发布时间】:2018-05-07 12:55:21
【问题描述】:

我需要匹配任何以“&”结尾但中间不包含“,”或“&”的行。

a b c &

a, b, c, &

a & b, c &

a & b

我能够通过使用获得部分成功:

^(?!.*,).*&.*$

我都得到了:

a b c &
a & b

所以我试过了

^(?!.*(,|&)).*&.*$

而且我找不到任何匹配项。我怎样才能修改我的正则表达式,所以我只能得到a b c &?我正在使用 .NET

【问题讨论】:

标签: .net regex


【解决方案1】:

似乎你应该通过使用否定字符类来获得你需要的东西,例如

^[^,&]*&\s*$

使用多行标志。

如果您不想按照 revo 的建议允许尾随空格,可以将 \s* 替换为 \r?。

如果您正在处理多行文本(而不是逐行测试),您可能还希望将换行符添加到否定字符类 ([^,&\n]) 以避免重叠匹配。

【讨论】:

  • 最好使用\r? 而不是\s*,否则行尾也允许有空格。
  • @revo 确定,添加了注释。
  • 我认为 OP 处理多行输入,因此,您最好将换行符添加到否定字符类中。实际上,这就是在使用 RegexOptions.Multiline 选项编译的 .NET 正则表达式中 $ 之前的 \r? 点。
猜你喜欢
  • 2011-05-05
  • 2017-10-02
  • 2020-08-25
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多