首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用regex捕获数字iwth逗号或点

用regex捕获数字iwth逗号或点
EN

Stack Overflow用户
提问于 2019-10-15 09:16:10
回答 1查看 52关注 0票数 1

我有regex代码

https://regex101.com/r/o5gdDt/8

就像你看到的这段代码

代码语言:javascript
运行
复制
(?<!\S)(?<![\d,])(?:(?!(?:1[2-9]\d\d|20[01]\d|2020))\d{4,}[\u00BC-\u00BE\u2150-\u215E]?|\d{1,3}(?:,\d{3})+)(?![\d,])[\u00BC-\u00BE\u2150-\u215E]?(?!x)(?!/)

可以捕获所有在文本中由3位数字输出的数字,如

  • 这是100,100
  • “23 456”
  • “1 435”

全部超过4位数,如无逗号分隔。

  • 2345
  • 1234“这里是123456”

也是这样的数字

  • 65,656-
  • 65,656-5,
  • 23,123.5

这里唯一的小问题是,如果在前两种类型之后有一个逗号(点),它就不能捕获这些。例如,它无法捕获

  • “这是100,100”
  • “23 456”
  • “1 435人”

不幸的是,这里有一些以comma...can结尾的数字,有人给了我一个关于如何修改这个以捕获上面的内容的想法?

我试过这样做,修改后的版本如下:

代码语言:javascript
运行
复制
(?<!\S)(?<![\d,])(?:(?!(?:1[2-9]\d\d|20[01]\d|2020))\d{4,}[\u00BC-\u00BE\u2150-\u215E]?|\d{1,3}(?:,\d{3})+)(?![\d])[\u00BC-\u00BE\u2150-\u215E]?(?!x)(?!/)

基本上,我删除了逗号在(?)但在我的上下文中,它引起了另一个问题,它捕获了一个数字的一部分,它是这样的等式的一部分:

4 310 747 475 x2 57 349 565 416 398 x

见这里:

https://regex101.com/r/o5gdDt/10

我知道这是个特别的问题我很乐意了解你的偶像

EN

回答 1

Stack Overflow用户

发布于 2019-10-15 09:29:32

这里的主要问题是,当匹配后面跟着一个数字或逗号时,(?![\d,])会失败,而当匹配后面跟着一个数字或一个逗号加上一个数字时,您想要失败。

(?![\d,])替换为(?!,?\d)

而且,(?<!\S)(?<![\d,])看起来是多余的,因为(?<!\S)需要空格或字符串的开始,这肯定不是数字或,。根据您的需求使用(?<!\S)(?<!\d)(?<!\d,)

用OR:(?!x)(?!/) => (?!x|/) => (?![x/])加入负外观。

为了避免匹配年份,您可能会忽略所有从它们开始的数字,这样2020222就不会匹配。将(?!\d)添加到展望中,(?!(?:1[2-9]\d\d|20[01]\d|2020)(?!\d))

所以,这个模式看起来就像

代码语言:javascript
运行
复制
(?<!\S)(?:(?!(?:1[2-9]\d\d|20[01]\d|2020)(?!\d))\d{4,}[\u00BC-\u00BE\u2150-\u215E]?|\d{1,3}(?:,\d{3})+)(?!,?\d)[\u00BC-\u00BE\u2150-\u215E]?(?![x/])

regex演示

重要:在末尾有[\u00BC-\u00BE\u2150-\u215E]?(?![x/]),在可选模式之后出现负面展望。一旦引擎无法找到x/的匹配项,它就会回溯,并且很可能会找到部分匹配。如果不希望在65,656½x中匹配65,656½x,请将[\u00BC-\u00BE\u2150-\u215E]?(?![x/])替换为(?![\u00BC-\u00BE\u2150-\u215E]?[x/])[\u00BC-\u00BE\u2150-\u215E]?

另一个regex演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58391227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档