python - 如何在 Python 中使用正则表达式从字符串中提取数字,除非在括号内?

标签 python regex

这是我的测试字符串:

  • 字字字字; 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/

相关文章:

Python:在列表中存储和删除线程

python - 如何在 Django 或 SQL 中查询 Non Unique Together 值?

python - 在 Django 中将消息显示为弹出窗口/警报?

javascript - 如何使用正则表达式来约束 ReactJS 路由

java - 文本与组中单词的子字符串错误匹配

c# - 抓取基于登录的网站的最佳方式是什么?

python - 使用朴素贝叶斯分类器的 open() 语句需要很长时间

java - 使用正则表达式验证数字和货币

java - 如何在 Java 的正则表达式中使用 OR ?

c# - 使用正则表达式删除整个 Html 中的空格,但在 pre 内部