在准备了.bib文件中的乳胶书目之后,我发现有一个关于资本化的问题。你知道吗
根据: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)
只在第一个单词后面加括号。你知道吗
这将在字符串的第一部分使用负向前看:
见http://regex101.com/r/hL2lE6/6
更新:Avinash Raj对可能出现在标题中的特殊字符(如撇号)提出了一个很好的观点,因此我将
\w+
改为\S+
,并更新了示例文本来测试它。你知道吗注意:如果标题中包含以特殊字符结尾的单词,并且该字符需要包含在括号中,请参阅此处以获取解决方案:http://regex101.com/r/hL2lE6/11
它使用
(?!title\s*=\s*")\b([^"=\s]+)
。但是,你主要关心的是资本化,所以这可能无关紧要。在这种情况下,我建议保持简单并坚持使用\S+
。你知道吗它不可能通过
re
模块实现。但您可以通过下面这样的外部regex
模块来实现这一点。你知道吗DEMO
\G
在上一个匹配的末尾或第一个匹配的字符串的开头断言位置。\G
强制模式只返回作为连续匹配链一部分的匹配。你知道吗参考文献:
相关问题 更多 >
编程相关推荐