通过Regex修复.bib文件标题

2024-04-20 01:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在准备了.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)

只在第一个单词后面加括号。你知道吗


Tags: 文件ofin标题numbertitleany单词
2条回答

这将在字符串的第一部分使用负向前看:

>>> 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+。你知道吗

它不可能通过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}",

DEMO

\G在上一个匹配的末尾或第一个匹配的字符串的开头断言位置。\G强制模式只返回作为连续匹配链一部分的匹配。你知道吗

参考文献:

相关问题 更多 >