【发布时间】:2018-05-29 09:55:15
【问题描述】:
我正在使用文本编辑器将参考文件中的论文标题大写。
我有类似的结构
...
Title = {Direct synthesis of antimicrobial coatings based on tailored bi-elemental nanoparticles},
journal={APL Mat.},
...
我只想将标题部分中的单词大写,使其变为
...
Title = {Direct Synthesis of Antimicrobial Coatings Based on Tailored Bi-Elemental Nanoparticles},
journal={APL Mat.},
...
我尝试使用外观正则表达式以以下方式搜索每个单词,后跟单词“Title”
(?<=Title)(\b.+?\b)
我想用
代替它\u\1
对于文本中的每次出现。 但是我的代码只选择了Title的“e”和Direct的“D”之后的字符,而找不到其他匹配项之后那个。
你能帮帮我吗?谢谢。
【问题讨论】:
-
尝试将
(\G(?!^)(?:[^}\w]+(?:o[fn]|in))*[^}\w]+|Title\s*=\s*\{)(\w+)替换为$1\u$2。您可以在(?:o[fn]|in)组中添加更多排除项。 -
感谢您的回答。它有效,但异常总是导致它失败。我尝试自己修复它,但我是正则表达式的新手,但我实际上不知道如何使用它们。我用 $1\{\u$2\} 代替了它,这样它就不会再改变大写字母了。当我发现行中已经存在其他大括号时,主要问题发生在“{XPS}手册:foo foo foo”的情况下,我试图在#(\G(?!^)(?:[^ }\w]+(?:o[fn]|in))*[^}\w]+|Title\s*=\s*\{)(\{?\w+\}?)#问题是当我找到两个}}。再次感谢您!
-
我惊讶地发现了以下解决方案 (\G(?!^)(?:[^}\n\w]+(?:o[fn]|in))*[^ }\n\w]+|Title\s*=\s*\{)(\{\w+\}) 用*代替的问题?是不是由于某种原因它开始选择换行符作为要更改的单词(你能解释一下为什么吗?\}* 应该只是从 0 到 n 次的封闭式括号..),所以我在用于空隙空间选择的方括号。我使用正则表达式的第一天没有我那么沮丧。谢谢你! :)(如何在简短的答案中嵌入代码?)
-
好的,我明白了,换行符匹配了,我只是没有更长的文本要测试。所以,
(\G(?!^)(?:[^}\n\w]+(?:o[fn]|in))*[^}\n\w]+|Title\s*=\s*\{)(\w+)有效,对吧? -
(\G(?!^)(?:[^}\n\w]+(?:o[fn]|in|the|by|for|to|and*|a ))*[^}\n\w]+|Title\s*=\s*\{)(\{\w+\}) (注意最后一部分以避免多括号中断) 工作。谢谢楼主!
标签: regex uppercase lookbehind bibtex bibliography