在.bib文件中准备我的LaTeX参考书目后,我发现大写的问题。
根据:this信息,解决方案是为每个标题中的每个单词添加括号(如我选中的那样,为整个标题添加括号不起作用)。
例如,我希望从更改:
title = "What a interesting title",
title= "What a boring title",
title="What a crazy title",
到
title = "{What} {a} {interesting} {title}",
title= "{What} {a} {boring} {title}",
title="{What} {a} {crazy} {title}",
这样:
title <any number of spaces> = <any number of spaces> " <words in title> ",
应替换为:
title <any number of spaces> = <any number of spaces> " <{Each} {word} {in} {title} {should} {be} {in} {bracket}> ",
我试图用Python中的Regex来做,但不知道出了什么问题。
我的代码:
re.sub(r'(title[\s-]*=[\s-]*\")(\b(\w+)\b)',r'\1{\2}',line)
仅在第一个单词中添加括号。
答案 0 :(得分:1)
这在字符串的第一部分使用负向前瞻:
>>> import re
... s = """title = "It's an interesting title",
... title= "What a boring title",
... title="What a crazy title","""
... print(re.sub(r'(?!title\s*=\s*")\b(\S+)\b',r'{\1}',s))
title = "{It's} {an} {interesting} {title}",
title= "{What} {a} {boring} {title}",
title="{What} {a} {crazy} {title}",
请参阅http://regex101.com/r/hL2lE6/6
更新:Avinash Raj对可能出现在标题中的特殊字符(如撇号)提出了一个很好的观点,因此我将\w+
更改为\S+
并更新了示例文本以对其进行测试。
注意:如果您的标题包含以特殊字符结尾的字词,并且该字符需要包含在括号中,请参阅此处了解解决方案:http://regex101.com/r/hL2lE6/11
它使用(?!title\s*=\s*")\b([^"=\s]+)
。但是,您主要担心的是资本化,因此可能无关紧要。在这种情况下,我建议保持简单并坚持使用\S+
。
答案 1 :(得分:0)
通过re
模块无法实现。但您可以通过下面的外部regex
模块实现此目的。
>>> import regex
>>> s = '''title = "What a interesting title",
title= "What a boring title",
title="What a crazy title",'''
>>> print(regex.sub(r'(?m)((?:^title\s*=\s*"|\G) *)([^"\s\n]+)', r'\1{\2}',s))
title = "{What} {a} {interesting} {title}",
title= "{What} {a} {boring} {title}",
title="{What} {a} {crazy} {title}",
\G
断言上一场比赛结束时的位置或第一场比赛的字符串开头。 \G
强制模式仅返回属于连续匹配链的匹配项。
参考文献: