我试图创建一个正则表达式来捕获文本中的引用。
下面是一些文中引用的例句:
1.... (Nivre等人,2007) 中报告的结果不具有代表性...
1....两个系统使用了马尔可夫链方法 (Sagae和Tsujii 2007)。
- Nivre (2007) 表明......
1....用于附加和标记依赖项 (Chen等人,2007; Dredze等人,2007年)。
目前,我拥有的正则表达式是
\(\D*\d\d\d\d\)
它与示例1-3匹配,但与示例4不匹配。如何修改它以捕获示例4?
谢谢你!
7条答案
按热度按时间wd2eg0qa1#
我最近一直在用这样的东西来实现这个目的:
运行时,它将生成:
8nuwlpux2#
\((.+?)\)
应该会撷取所有这些项目m3eecexj3#
基于Tex's answer,我为一个朋友写了一个非常简单的Python脚本,叫做Overcite(学期末,懒引用,你知道是怎么回事)。
它涵盖了比Tex更多的情况,这可能会有帮助(参见测试文件),包括与号和页码引用。整个脚本基本上是:
btxsgosb4#
3hvapo4f5#
您所需要的只是插入一个模式,该模式与引用的模式匹配零次或多次,前面加一个分号。
\(cite(; cite)*\)
.模式为:
\(\D*\d{4}(;\D*\d{4})*\)
.rbl8hiat6#
这是我的解决方案,在C++中使用boost regex。希望它对某人有帮助:-)
qrjkbowd7#
到目前为止,这一条对我很有效:
根据你想要达到的目的,你可能需要删除前导白色(
\s
)。我把它放在这里是因为我想删除捕获的引文,如果我不包括空格,我会在引文前面的单词和后面的标点符号之间留下一个空格。它包含问题中提到的所有示例(请参见https://regex101.com/r/BwBVif/1)。