【问题标题】:Regex: match string with parathese with '|' operator [duplicate]正则表达式:用“|”匹配带括号的字符串运算符 [重复]
【发布时间】:2021-11-10 21:12:47
【问题描述】:

我正在尝试使用单个正则表达式匹配字符串中“数字”或“数字”的子字符串。但是,我可以让它们单独匹配,但不能一起匹配。

个人
'Number'可以匹配单词number

'Number[(]s[)]' 可以匹配Number(s)

但是,如果我将它们放在一起并执行 "Number|Number[(]s[)]" 它与 (s)"Number(s)" 不匹配。

我尝试过的:

1:在第二个字符串周围放置\b 边界,不起作用。

2:使用\ 进行转义,但 C# 因无法识别转义序列而对我大喊大叫,所以我选择不使用此选项

我知道我可以使用两个正则表达式来做我想做的事,但我想了解这里有什么问题并学习。

【问题讨论】:

  • 使用@"Number(?:\(s\))?",一个可选组。如果您仍然想要| 方式,请将较长的放在第一位,Number[(]s[)]|Number

标签: c# regex


【解决方案1】:

Number|Number[(]s[)] 不会匹配 Number(s) 因为它的第一部分“数字”匹配它。 尝试更改图案零件顺序:Number[(]s[)]|Number。这将首先尝试与带括号的字符串匹配,如果不能,它将尝试使用短格式。 模式也应该是:Number\(s\)|Number 出现无法识别的转义错误消息是因为如果您希望将此模式写为字符串文字,您必须转义反斜杠符号:"Number\\(s\\)|Number"

【讨论】:

  • 如果对 -1 有一些解释就好了!答案在发布之前已经过测试,并且可以正常工作!
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2019-01-05
  • 2017-09-15
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多