这是我的测试字符串:
- 字字字字; 123-125
- 单词单词(1000-1000)
- 单词单词单词(1000-1000); 99-999
- 一个字一个字
我应该使用什么正则表达式来只提取那些不在括号内的数字(格式:\d+-\d+
)(上面粗体显示的那些)?
我已经试过了:
(\d+-\d+)(?!\))
但它是匹配的:
- 字字字字; 123-125
- 单词单词(1000-1000)
- 单词单词单词(1000-1000); 99-999
- 一个字一个字
注意第二个括号前的最后一位数字。
我试图删除任何后跟括号的匹配项,但它只删除了一位数字而不是整个匹配项!我在这里缺少什么?
任何帮助将不胜感激。
最佳答案
您可以使用否定的前瞻来仅获取您需要的那些值,如下所示:
(?![^()]*\))(\d+-\d+)
(?![^()]*\))
前瞻实际上检查连字符数字后没有右圆括号。
参见 demo
示例代码:
import re
p = re.compile(ur'(?![^()]*\))(\d+-\d+)')
test_str = u"Word word word; 123-125\nWord word (1000-1000)\nWord word word (1000-1000); 99-999\nWord word word word"
re.findall(p, test_str)
sample program 的输出:
[u'123-125', u'99-999']
关于python - 如何在 Python 中使用正则表达式从字符串中提取数字,除非在括号内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917127/