通过 RegEx 从 String 获取价格(仅金额,无货币标签,无特殊字符)

时间:2021-05-27 22:03:11

标签: regex vba

我编写了一个同样有效的 RegEx 语法,但我担心我遗漏了一些东西,或者可能有更优雅的方式来实现我所需要的。

链接:https://regex101.com/r/KZxt9I/1

enter image description here

目标是获得术语“EUR”之前的任何价格:

  1. 有时价格写成第一场比赛 -> 整数(没有 美分)
  2. 有时价格会写成第二场比赛 -> double(由于美分而带有逗号)

正如您在第一场比赛中看到的那样,“EUR”之前也有“,-”,而在第二场比赛中,字符串在“EUR”之前没有“,-”。

如果中间有更多空格,我的 RegEx 是否足够?

1 个答案:

答案 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.MultilineTrue,则为行)
  • Preis - 一个词
  • $ - 字符串/行结束
  • \s* - 零个或多个空白字符
  • (\d+(?:,\d+)?) - 捕获第 1 组:一个或多个数字,然后可选出现一个逗号和一个或多个数字
  • \W* - 尽可能多的零个或多个非单词字符
  • EUR\b - EUR 作为一个整体。