我需要一个小脚本,从给定的文本过滤参考文献。引用可以采用两种格式:
布拉布拉布拉布拉布拉布拉(斯诺登,2014a)布拉布拉布拉布拉布拉布拉布拉布拉(布什和布莱尔,2005)布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉。你知道吗
通过两次搜索查找这些引用:
matches1 = re.findall('\([A-Z]\w*,\s?\d\d\d\d[a-z]?\)', line)
matches2 = re.findall('\([A-Z]\w* and [A-Z]\w*,\s?\d\d\d\d[a-z]?\)', line)
这些搜索正确地找到(Snowden,2014a)resp。(布什和布莱尔,2005年)。但现在我想在一次搜索中找到这两种引用,但都失败了:
matches1 = re.findall('\([A-Z]\w*( and [A-Z]\w*)?,\s?\d\d\d\d[a-z]?\)', line)
此搜索返回“”而不是(Snowden,2014a)和“and Blair”而不是(Bush and Blair,2005)。我不清楚为什么会这样或者我做错了什么,所以非常感谢您的帮助:)
谢谢!你知道吗
通过添加
?:
,使您的可选组不被捕获:只需将捕获组转换为非捕获组,并将
\d\d\d\d
减少为\d{4}
。因为re.findall
优先考虑组。如果存在任何组,它将只打印组中存在的字符。它忘记了匹配的字符串。你知道吗示例代码:
相关问题 更多 >
编程相关推荐