如何匹配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 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

正则表达式

在 OpenOffice Calc 正则表达式中搜索精确数字数组

如何使用动态正则表达式匹配 Postgres 中的值

正则表达式查找单词的最佳匹配子集