【问题标题】: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

  1. 29/7/2021,FDC 银行 PLC / Mr P.S.R STEVE SMITH,JKB99999LC,“9,500,000”
  2. 29/7/2021,FDC 银行 PLC / Mr P.S.R STEVE SMITH,JKB99999LC,"9,500,000"
  3. 29/7/2021,FDC Bank PLC / Mr P.S.R STEVE SMITH,JKB99999LC,9500000
  4. 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 的回答确实
  • 哦 - 对不起。误读了问题。

标签: c# regex


【解决方案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* 来匹配任何零个或多个非单词字符。

我更喜欢 (?&lt;name&gt;...) 命名捕获组语法,但如果您更习惯这种语法,您可以使用单引号变体。

【讨论】:

  • 注意到您上面列出的第二个RegEx (?&lt;Account&gt;JKB[0-9]+LC),"W*(?&lt;Amount&gt;[0-9,.]*) 不正确;不应该是(?&lt;Account&gt;JKB[0-9]+LC),"?\W*(?&lt;Amount&gt;[0-9,.]*) 吗?这也涵盖了所有内容。
  • @hiFI 当我们有确切的规格时,我们只能谈论正则表达式的“正确性”。在这种情况下,,\W* 的工作方式与,"?\W* 相同,因为" 是一个非单词字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多