首页 > 解决方案 > Scala中的动态正则表达式

问题描述

我想通过正则表达式在表的列名中提取货币符号,它可能是(我正在为美元组合(有效的 - 美元、美元、美元)做这件事,但实际上,我必须从配置中迭代一个货币列表文件并制作通用正则表达式,然后我将使用该正则表达式来解析所有表的所有列):

X 表示不提取
上述所有情况都可以与来自配置文件的任何有效货币符号互换。

基本上,我必须为这个词加上边框,但它可以被特殊字符包围。

我正在使用 Scala 并Regex通过调用.r正则表达式字符串来创建对象

我尝试使用\b(US\$|USD)\b两种可能的组合,但可以通过从配置文件循环列表来附加更多货币符号。这个问题来自 string gfgh (US$f) (US$) (USD) USD,它正确匹配 USD 并且 for US$,它匹配第二个单词而不是第四个单词。我正在尝试解决方法以US$按预期获得匹配(在我的示例中为第三个单词)。

标签: regexstringscala

解决方案


它不匹配(US$),因为单词边界\b在 之间不匹配$)

匹配示例数据的一种方法可能是使用交替和环视:

(?<={)USD(?=})|(?<=\()USD(?=\))|\bUSD(?![\S$])|(?<=\()(?:US)?\$(?=\))|US\$(?!\S)

正则表达式演示| 斯卡拉演示

这将匹配:

  • <={)USD(?=})匹配被 {} 包围的美元
  • |或者
  • (?<=\()USD(?=\))匹配被 () 包围的美元
  • |或者
  • \bUSD(?![\S$])当后面没有非空白字符时匹配 USD 或$
  • |或者
  • (?<=\()(?:US)?\$(?=\))匹配可选US后跟$()包围
  • |或者
  • US\$(?!\S)当后面没有非空白字符时匹配 US$

推荐阅读