我是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文件中提取书目引用。但我不想提取恰好在括号内的任何不是书目参考的东西。
再次,如果这是新手,我道歉,如果有这样的问题,我再次道歉。我搜索过,但还没有运气。
答案 0 :(得分:1)
使用[^()]
代替.
。这将确保没有嵌套()。
>>> re.findall("(\([^()]+[,] [0-9]{4}\))", s)
['(Stackoverflow, 2013)', '(Stackoverflow, 1999)']
答案 1 :(得分:0)
假设你有没有嵌套括号,你可以使用类似的东西:(\([^()]+?, [0-9]{4}\))
。这将匹配一组括号内的任何非括号字符,后面跟一个逗号,一个空格四位数和一个右括号。
答案 2 :(得分:0)
我会建议\(\w+,\s+[0-9]{4}\)
之类的东西。一对夫妇改变了原来: