【问题标题】:Ignoring a specific pattern (Regex)忽略特定模式(正则表达式)
【发布时间】:2017-04-30 21:38:51
【问题描述】:

文字:

应付总额(包括 GST 7.68 美元)84.55 美元

正则表达式:

Total Amount.?\s*(?!\(inc\))?[^\$]*(\$\s?[0-9,]+(\.[0-9]{1,})?)

https://regex101.com/r/YXr023/1

但它匹配找到的第一个数量$7.68。如何忽略括号内的任何内容,使其匹配$84.55

(?![^\(]*\)) 附加到末尾完全忽略了该行,这是我不想要的。

【问题讨论】:

  • 是否只有一组括号?括号外(之后)总是有一个数字吗?您的问题正则表达式和链接中的正则表达式不同是否重要? regex101.com/r/YXr023/3 呢?而不是试图让它全部非贪婪,只是贪婪匹配到最后一个 $ ... ?
  • 是的,只有一组支架。描述包括忽略无效的括号部分。但你的似乎有效!
  • @TessellatingHeckler .. 除非金额在几行之后(OCR 错误)。示例:pastebin.com/ikL3Jvt0
  • 换句话说,您正在寻找所需模式的第二次出现?检查Match at every second occurrenceHow to find 3rd occurrence of a pattern in a line
  • @BehradKhodayar 可选,并非总是如此。

标签: regex


【解决方案1】:

希望这篇文章对你有所帮助..

正则表达式: (?<!\()\$[\d\.]+(?!.*?\))

1. (?<!\() 负向寻找(

2. \$[\d\.]+ 匹配像$10.1000 这样的字符串

3. (?!.*?\)) 不包含任何进一步的)

Regex Demo

【讨论】:

  • 谢谢,但我并没有自己提取 $ 金额,我正在检查标签然后向前看,所以我需要使用我的正则表达式,但忽略括号内的任何内容
  • 我在几个文档上使用了这个正则表达式,而不仅仅是这个,所以你的每个文档都失败了。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多