【问题标题】:Ignore spaces between a groups of numbers in regex? [duplicate]忽略正则表达式中一组数字之间的空格? [复制]
【发布时间】:2020-05-08 18:00:53
【问题描述】:

您好,我正在尝试用正则表达式读取增值税号,前面是国家代码:

GB 009 0009 09

他们可以这样格式化

GB009000909
GB 009000909
GB 0 09 0009 09

我现在的表达是:(GB\d{9}\b|GB\s{1}\d{9}\b)

如何保持简单并忽略空格?

【问题讨论】:

标签: regex


【解决方案1】:

你可以使用GB(\s?\d){9}

GB 与字符 GB 字面匹配(区分大小写)

第一抓捕组(\s?\d){9}

{9} 量词——精确匹配 9 次

重复捕获组将仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置一个捕获组以捕获所有迭代或使用非捕获组

\s? 匹配任何空白字符(等于[\r\n\t\f\v ]

? 量词 - 匹配 0 到 1 次,尽可能多次,按需回馈(贪婪)

\d 匹配一个数字(等于[0-9]

test it yourself

【讨论】:

  • @ToddOwen 谢谢,但我不是 RegEx 的传奇。 Wiktor Stribiżew 是一个传奇!
  • 他刚刚关闭了一个与 c# 相关的内容,对我没有多大帮助,但还是谢谢
【解决方案2】:
  • 模式[ ]* 将匹配任意数量的空格(包括0)。
  • ([0-9]+) 模式将匹配 1 个或多个数字。
  • ([0-9]*) 模式可以是任意位数(包括 0)。

我认为这样的东西可以匹配你的一切:

GB[ ]*([0-9]+)[ ]*([0-9]*)[ ]*([0-9]*)[ ]*([0-9]*)

每次都匹配 GB。然后是 0 个或多个空格,然后是至少 1 个数字,如果出现 0 个或多个,则空格然后数字最多 4 次。

如果需要更多解释,请告诉我!

【讨论】:

  • 这行得通,只是答案更整洁
  • 当然,这是有道理的。我肯定会进行明确的比赛。对于任何未来的观众来说,一个较短的版本可能是:GB([ ]*([0-9]*))+
猜你喜欢
  • 2023-01-16
  • 1970-01-01
  • 2021-09-13
  • 2020-08-06
  • 2011-08-12
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多