Regex模式匹配预算数字问题



我遇到了一个问题,我希望有一个对Regex更了解的人可以帮助我。

我正在尝试从包含预算行项目的PDF文件中提取数据。我使用这个正则表达式模式来获取第一个数字的索引,这样我就可以提取右边的数字。

Regex模式:

(([(]?[0-9]+[)]? )|([(]?[0-9]+[)]?)|(- )|(-))+$

行项目:"现代化和改进(注9(260(180(640-155">

这适用于99%的行项目,除了我遇到的这个项目。问题是模式与文本部分中的"9("匹配。

这个Regex模式有没有办法说,如果有括号,里面必须只包含数字?

谢谢!

您可以重复所有可能的选项,直到字符串结束:

(?:(d+)|d+(?:s*-s*d+)?)(?:s+(?:(d+)|d+(?:s*-s*d+)?))*$

解释

  • (?:非捕获组
    • (d+)匹配括号之间的1+位数字
    • |
    • d+(?:s*-s*d+)?匹配1+位,并可选择匹配-和1+位
  • )关闭非捕获组
  • (?:非捕获组作为一个整体重复
    • s+匹配1+空白字符
    • (?:(d+)|d+(?:s*-s*d+)?)与第一个图案相同
  • )*关闭非捕获组并可选择重复
  • $字符串末尾

Regex演示

最新更新