我遇到了一个问题,我希望有一个对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演示