正则表达式捕获引号内和带/不带空格的数字
Posted
技术标签:
【中文标题】正则表达式捕获引号内和带/不带空格的数字【英文标题】:Regular Expression to Capture for Number within Quotes and with/out Space 【发布时间】:2021-10-04 23:23:03 【问题描述】:我有一个正则表达式,它将捕获以 JKB 开头的任何字符串文字及其后面的数字。
我为它构建了以下 Reg Ex:
(?'Account'JKB[0-9]+LC),(?'Amount'[0-9,.]*)
它从以下列表中捕获除第一个和第二个之外的所有Amount
:
-
29/7/2021,FDC 银行 PLC / Mr P.S.R STEVE SMITH,JKB99999LC,“9,500,000”
29/7/2021,FDC 银行 PLC / Mr P.S.R STEVE SMITH,JKB99999LC,"9,500,000"
29/7/2021,FDC Bank PLC / Mr P.S.R STEVE SMITH,JKB99999LC,9500000
29/7/2021,FDC Bank PLC / Mr P.S.R STEVE SMITH,JKB99999LC,9,500,000
我怎样才能让我的 RegEx 也适应捕获第 1 项和第 2 项;至少数量
这是我的工作:https://regex101.com/r/mcQtA9/2
【问题讨论】:
@SebastianSchumann 您的演示没有捕获所有Amount
组。但是,下面@wiktor-Stribiżew 的回答确实
哦 - 对不起。误读了问题。
【参考方案1】:
您需要确保使用两个组模式之间的子字符串。你可以使用
(?<Account>JKB[0-9]+LC),"?\s*(?<Amount>[0-9,.]*)
(?<Account>JKB[0-9]+LC),\W*(?<Amount>[0-9,.]*)
查看regex101 demo 和.NET regex demo:
我在第一个模式中使用"?\s*
来匹配可选的"
,然后匹配零个或多个空白字符。在第二个变体中,我只是使用 \W*
来匹配任何零个或多个非单词字符。
我更喜欢 (?<name>...)
命名捕获组语法,但如果您更习惯这种语法,您可以使用单引号变体。
【讨论】:
注意到您上面列出的第二个RegEx
(?<Account>JKB[0-9]+LC),"W*(?<Amount>[0-9,.]*)
不正确;不应该是(?<Account>JKB[0-9]+LC),"?\W*(?<Amount>[0-9,.]*)
吗?这也涵盖了所有内容。
@hiFI 当我们有确切的规格时,我们只能谈论正则表达式的“正确性”。在这种情况下,,\W*
的工作方式与,"?\W*
相同,因为"
是一个非单词字符。以上是关于正则表达式捕获引号内和带/不带空格的数字的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格