使用Python提取具有特定格式的括号

时间:2013-08-08 04:50:46

标签: python regex

我是python的新手,所以我很抱歉这是一个非常新手的问题,但我试图从原始文本文件中提取具有特定格式的括号中的文本。 我用正则表达式试过这个,但如果它们是更好的方法,请告诉我。

通过示例显示我想要做的事情:

s = "Testing (Stackoverflow, 2013). Testing (again) (Stackoverflow, 1999)"

从这个字符串我想要一个像:

的结果
['(Stackoverflow, 2013)', '(Stackoverflow, 1999)']

到目前为止我试过的正则表达式是

"(\(.+[,] [0-9]{4}\))"

与re.findall()一起使用,但这只能给我结果:

['(Stackoverflow, 2013). Testing (again) (Stackoverflow, 1999)']

所以,正如您可能已经猜到的那样,我正在尝试从.txt文件中提取书目引用。但我不想提取恰好在括号内的任何不是书目参考的东西。

再次,如果这是新手,我道歉,如果有这样的问题,我再次道歉。我搜索过,但还没有运气。

3 个答案:

答案 0 :(得分:1)

使用[^()]代替.。这将确保没有嵌套()。

>>> re.findall("(\([^()]+[,] [0-9]{4}\))", s)
['(Stackoverflow, 2013)', '(Stackoverflow, 1999)']

答案 1 :(得分:0)

假设你有没有嵌套括号,你可以使用类似的东西:(\([^()]+?, [0-9]{4}\))。这将匹配一组括号内的任何非括号字符,后面跟一个逗号,一个空格四位数和一个右括号。

答案 2 :(得分:0)

我会建议\(\w+,\s+[0-9]{4}\)之类的东西。一对夫妇改变了原来:

  • 匹配单词字符(字母/数字/下划线),而不是源名称中的任何字符。
  • 在逗号后面匹配一个或多个空格字符,而不是将自己限制在单个文字空间。