1

我对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 文件中提取参考书目。但我不想提取任何恰好在括号中但不是书目参考的内容。

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

4

3 回答 3

1

使用[^()]而不是.. 这将确保没有嵌套的 ()。

>>> re.findall("(\([^()]+[,] [0-9]{4}\))", s)
['(Stackoverflow, 2013)', '(Stackoverflow, 1999)']
于 2013-08-08T04:56:48.943 回答
0

假设您没有嵌套括号,您可以使用如下内容:(\([^()]+?, [0-9]{4}\)). 这将匹配一组括号内的任何非括号字符,该括号后跟一个逗号、一个空白四位数字和一个右括号。

于 2013-08-08T04:57:32.823 回答
0

我会建议类似的东西\(\w+,\s+[0-9]{4}\)。与您的原始版本相比有一些变化:

  • 匹配单词字符(字母/数字/下划线)而不是源名称中的任何字符。
  • 匹配逗号后的一个或多个空格字符,而不是将自己限制为单个文字空格。
于 2013-08-08T04:59:38.113 回答