我有以下正则表达式:
(?<prefix>\S*?)\h*(?<score>\d+[+-]?)\s*(?<suffix>.*?(?:[A-Z]{2}|\d{2})[A-Z]{2}\d{2})
当目标文本包含三个捕获组中的每一个时,表达式工作正常,但在不是这种情况时会产生奇怪的结果。例如,以下文本产生了这些结果:
^15+ vwu&ob12Ai18 => This one works. All three groups
^15+ => This does not produce a match
vwu&ob12Ai18 => This does not produce a match
15+ vwu&ob12Ai18 => This one works - matching the 2nd and 3rd capture group.
前缀 - 应匹配字符串开头的各种字符。在这个例子中它是克拉,但其他潜在的字符包括:。 = F G~仅举几例。前缀有一个特定的字符列表。
图 - 是一个或两个数字的数字,可选地后面没有任何内容,加号(+),减号( - )或双引号(“)。
后缀 - 后缀是其他所有内容。后缀有一个特定的字符列表。
我在Regex 101有一个样本。注意 - 正则表达式101样本似乎组合线来创建匹配,但如果您一次查看一个字符串,您将得到与上面相同的结果。
我的问题是我应该如何更改我的正则表达式,以便我可以匹配上面的每个示例字符串。
更新:我在Regex 101上花了一些时间,并提出了一个比原版表现更好的正则表达式。这更像是一种蛮力方法,因为它不包括非捕获组。
^(?<prefix>[\^\s])?(?<figiure>[\d+-\s]{0,5})?\s?(?<suffix>[vwu&ob1\dAi]{0,19})?$
我猜测有一个更优雅的解决方案,但至少这是朝着正确方向迈出的一步。
答案 0 :(得分:1)
你的(x
模式):
(?<prefix>\S*?)\h*
(?<score>\d+[+-]?)\s*
(?<suffix>.*?(?:[A-Z]{2}|\d{2})[A-Z]{2}\d{2})
(可能)正确(我们已经确定in chat使用的正则表达式引擎是VBScript正则表达式5.5,因此没有命名组:
^
(\D+?(?=\d+["+-]?[ ]))?
(\d+["+-]?[ ])?
(.*)
http://regex101.com/r/sF2wV7/6
匹配线时要做的事情: