注意:我对正则表达式缺乏经验。
我希望能够将科学文章转换为iTunes曲目。为此,我将文本复制并粘贴到txt文件中并将其转换为语音轨道。然而,当我这样做时,包括参考,计算机的声音大声读取它们,例如"(Smith J. et al.2016)"这很烦人,因为我希望跳过包含引用的括号中的任何内容。 因此,我想制作一个python脚本,在将其转换为口语轨道之前从txt文件中删除所有这些引用。 我估计我可以使用以下代码执行此操作:
start_ref=find("(")
finish_ref=find(")", start_ref)
# then remove all pieces of the string between each start and finish
但这还不够准确。相反,我想以某种方式使用正则表达式。
有人可以向我展示一些示例代码,以便我如何迭代删除以下文本中的引用(同时考虑不同的引用样式,例如Harvard vs APA等):
"该方法已被证明优于先前讨论的方法 (史密斯,J。等人,2014)虽然有它的缺点,但很明显 好处大于劣势(Jones,A。& Karver,B。, 2009,Lubber,H。等,2013)。"
任何人都可以提供一些示例代码吗?
答案 0 :(得分:2)
类似
import re
text = ...
re.sub(r'\((?:[\w \.&]+\, )+[0-9]{4}\)', text)
好像是这样做的。 您可以使用Debuggex在正则表达式中训练自己。
答案 1 :(得分:1)
这应该可以解决问题:
import re
a = "This method has been shown to outperform previously discussed methods (Smith, J. et al., 2014) and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages (Jones, A. & Karver, B., 2009, Lubber, H. et al., 2013)."
a = re.sub(r"\s\([A-Z][a-z]+,\s[A-Z][a-z]?\.[^\)]*,\s\d{4}\)", "", a)
取代"" (即没有)每个字符串由空格(
组成,一个大写字母后跟一个或多个小写字母(即名称),逗号,空格,一个大写字母和一个点(可选地由一个空格分隔)像克里斯汀这样的名字的小写字母将缩写为Ch.
),然后除了右括号之外的任何内容,直到我们达到逗号,空格,四位数和右括号。总而言之,它假定应删除看起来像(Azdfs, E. stuff 2343)
的所有内容。我认为这应该足以避免过度检测。
我的代码获得的输出是This method has been shown to outperform previously discussed methods and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages.