我使用这个正则表达式来转换 TitleCase 中的单词并确认每个替换:
:s/\%V\<\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]\)\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]*\)\>/\u\1\L\2/gc
然而,这也匹配已经在 Titlecase 中的单词。
有谁知道如何更改上述正则表达式以跳过已经在 TitleCase 中的单词?
:s/\%V\<\([a-z0-9àäâæèéëêìòöôœùüûç]\)\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]*\)\>/\u\1\L\2/gc
似乎可以解决问题,在这里。
因为您在第一个字母捕获组中使用的范围内明确包含大写字符,所以您的模式将同时匹配 foo
和 Foo
。从该范围内删除大写字符似乎可以解决您的直接问题。
要仅匹配非大写单词,您希望匹配以 (a) 以小写字母开头或 (b) 以两个大写字母开头的单词。以下将做到这一点(添加重音字母和数字来品尝):
\b([A-Z])([A-Z][A-Za-z]*)|\b([a-z])([a-zA-Z]+)
但是有些单词在组\1
and中匹配,而\2
另一些在\3
and中匹配\4
。我不使用 vim,所以我不能说它是否会让你用这种模式代替。(例如,\u\1\3\L\2\4
;四个中只有两个是非空的)