【问题标题】:Regex to capitalize words正则表达式将单词大写
【发布时间】: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


【解决方案1】:

你可以使用

(\G(?!^)(?:[^}\n\w]+(?:o[fn]|in|the|by|for|to|and*|a))*[^}\n\w]+|Title\s*=\s*\{)(\w+)

并替换为$1\u$2。请参阅regex demo(由于 regex101 似乎不支持 \u 运算符,因此稍作修改)。

详情

  • (\G(?!^)(?:[^}\n\w]+(?:o[fn]|in))*[^}\n\w]+|Title\s*=\s*\{) - 两种选择之一:
    • \G(?!^)(?:[^}\n\w]+(?:o[fn]|in|the|by|for|to|and*|a))*[^}\n\w]+:
    • \G(?!^) - 上一场比赛结束
    • (?:[^}\n\w]+(?:o[fn]|in))* - 0 次或多次重复
      • [^}\n\w]+ - 除了}、LF 和一个单词字符之外的 1 个或多个字符
      • (?:o[fn]|in|the|by|for|to|and*|a) - ofonin 等(在此处添加更多应从大写中排除的单词
    • [^}\n\w]+ - 除了}、LF 和一个单词字符之外的 1 个或多个字符
    • | - 或
    • Title\s*=\s*\{ - Title, = 包含 0+ 个空格和 {
  • (\w+) - 第 2 组:一个或多个单词字符。

【讨论】:

  • 这不会有太大的不同,但你不是说and?而不是and*吗?
  • @AhmedAbdelhameed 我从 OP 复制了那部分。这部分可以/必须进一步编辑,以包括那些应该保持小写的功能词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
相关资源
最近更新 更多