regex - Scala中的动态正则表达式
问题描述
我想通过正则表达式在表的列名中提取货币符号,它可能是(我正在为美元组合(有效的 - 美元、美元、美元)做这件事,但实际上,我必须从配置中迭代一个货币列表文件并制作通用正则表达式,然后我将使用该正则表达式来解析所有表的所有列):
- 阿尔法美元 -> 美元
- Alpha_US$ _> US$
- 阿尔法($)-> $
- Alpha_$$ -> X
- 阿尔法{USD} -> 美元
- 阿尔法(USDOCOLAND} -> X
- Alpha(多个空格)USD -> USD
- 美元阿尔法 -> 美元
- 阿尔法美元美元 -> 美元
- 美元 -> 美元
- 阿尔法美元美元 -> X
X 表示不提取
上述所有情况都可以与来自配置文件的任何有效货币符号互换。
基本上,我必须为这个词加上边框,但它可以被特殊字符包围。
我正在使用 Scala 并Regex
通过调用.r
正则表达式字符串来创建对象
我尝试使用\b(US\$|USD)\b
两种可能的组合,但可以通过从配置文件循环列表来附加更多货币符号。这个问题来自 string gfgh (US$f) (US$) (USD) USD
,它正确匹配 USD 并且 for US$
,它匹配第二个单词而不是第四个单词。我正在尝试解决方法以US$
按预期获得匹配(在我的示例中为第三个单词)。
解决方案
它不匹配(US$)
,因为单词边界\b
在 之间不匹配$)
。
匹配示例数据的一种方法可能是使用交替和环视:
(?<={)USD(?=})|(?<=\()USD(?=\))|\bUSD(?![\S$])|(?<=\()(?:US)?\$(?=\))|US\$(?!\S)
这将匹配:
<={)USD(?=})
匹配被 {} 包围的美元|
或者(?<=\()USD(?=\))
匹配被 () 包围的美元|
或者\bUSD(?![\S$])
当后面没有非空白字符时匹配 USD 或$
|
或者(?<=\()(?:US)?\$(?=\))
匹配可选US
后跟$
()包围|
或者US\$(?!\S)
当后面没有非空白字符时匹配 US$
推荐阅读
- python - apache 或flask 是否需要对使用pickle 的Web 应用程序进行特殊设置?
- javascript - 如何修复“由于访问控制检查,Fetch API 无法加载 http://localhost:3000/static/js/0.chunk.js”
- html - Angular:如何强制元素进入新行?
- php - 删除重复的数组键
- php - 如何在常规 PHP/HTML 页面和 Angular 页面之间共享 PHP 会话?
- python - 熊猫拆分列表列
- excel - 这个 VBA 语句可以写成一行吗?
- eiffel - 埃菲尔:比较类型的最佳方法,而不用发出嘘声
- go-cd - 我可以在 gocd-server 页面上检查代理的健康状况吗?
- java - 如何在加载类的字节码之前对其进行操作?