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