如何匹配plsql中正则表达式中的列表/数组?
Posted
技术标签:
【中文标题】如何匹配plsql中正则表达式中的列表/数组?【英文标题】:How to match against a list/array in regrex in plsql? 【发布时间】:2019-04-23 08:43:45 【问题描述】:我在plsql中有一些这样的代码
regexp_matches(source_string, pattern)
我想将源字符串与一个列表进行匹配,比如货币符号列表。我的 python 代码中已经有该列表,如果源以任何货币符号(不是多个符号)开头,我希望上述函数返回匹配项。所以 "$345" 应该匹配,而 "abc345" 和 "$$230" 不应该匹配。
请帮忙
【问题讨论】:
【参考方案1】:使用正则表达式,您可以通过以下方式实现:^\$\d+$
细分:^...$
- 匹配从行首 (^) 到行尾 ($) 之间的任何内容,您需要这样做以避免匹配 $$450
(行以2 美元而不是 1)
\$
- 文字美元符号(必须转义)
\d
- 0 到 9 之间的任意数字
\d+
- 从 0 到 9 的任何数字至少重复一次(例如 8、8735,但不是什么都没有)
测试和玩耍的链接:https://regex101.com/r/c3YgQO/1
由于在 cmets 中添加了更多信息,因此更新如下:
这个正则表达式:^(-?([€$]\d+|\d+%))$
似乎是您正在寻找的。
细分:
-?
- 匹配-
一次或根本不匹配,使其可选
(...|\d+%)
- 匹配 ...
或 \d+%
\d+%
- 匹配至少一个数字后跟一个百分号 (%
)
新测试链接:https://regex101.com/r/NBzaG1/1
要同时匹配带小数点的数字,您可以将 \d+
替换为:\d+(\.\d)?\d*
【讨论】:
其他货币符号呢?你的代码只需要美元。 您可以添加多个货币符号:^[$€¥]\d+$
请注意,您不需要转义 [
和 ]
之间的任何符号。我建议获取货币符号列表并将它们链接在一个字符串中以使用它:pattern = '^[' + your_currency_symbols_string + ']\d+$'
@HarisMuzaffar 你是否也想用小数点匹配金额,例如3.50 美元,或带有千位分隔符的金额,例如2,000,000 美元?以货币结尾的字符串呢,例如“给我 100 美元”?
还有一些国家在数字后面使用他们的货币符号,例如:350 欧元而不是 350 欧元。
是否有办法提及货币符号列表而不是写硬编码值......像这样 [currencySymbolList] 而不是 [$€¥....]以上是关于如何匹配plsql中正则表达式中的列表/数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?
Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?