我编写了一个同样有效的 RegEx 语法,但我担心我遗漏了一些东西,或者可能有更优雅的方式来实现我所需要的。
链接:https://regex101.com/r/KZxt9I/1
目标是获得术语“EUR”之前的任何价格:
正如您在第一场比赛中看到的那样,“EUR”之前也有“,-”,而在第二场比赛中,字符串在“EUR”之前没有“,-”。
如果中间有更多空格,我的 RegEx 是否足够?
答案 0 :(得分:3)
你的正则表达式太复杂了,你可以让它更简单:
^Preis$\s*(\d+(?:,\d+)?).*EUR
^Preis$\s*(\d+(?:,\d+)?)\W*EUR
参见regex demo。请注意,您只需要一个捕获组,其余的可以编写为消费模式,因为无论如何您都将提取组 1 的内容。
两者的区别是\W*
和.*
,\W*
匹配任意零个或多个非单词字符,而.*
匹配除行以外的任意零个或多个字符尽可能多地打破字符。
您使用的 \s*
匹配任何零个或多个空白字符,因此您不必担心 Preis
和数字之间有多少个空白字符。 >
如果您需要确保 EUR
作为整个单词匹配,请在后面添加 \b
:
^Preis$\s*(\d+(?:,\d+)?)\W*EUR\b
详情:
^
- 字符串的开头(如果 RegEx.Multiline
为 True,则为行)Preis
- 一个词$
- 字符串/行结束\s*
- 零个或多个空白字符(\d+(?:,\d+)?)
- 捕获第 1 组:一个或多个数字,然后可选出现一个逗号和一个或多个数字\W*
- 尽可能多的零个或多个非单词字符EUR\b
- EUR
作为一个整体。