0

我使用这个正则表达式来转换 TitleCase 中的单词并确认每个替换:

:s/\%V\<\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]\)\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]*\)\>/\u\1\L\2/gc 

然而,这也匹配已经在 Titlecase 中的单词。

有谁知道如何更改上述正则表达式以跳过已经在 TitleCase 中的单词?

4

2 回答 2

2
:s/\%V\<\([a-z0-9àäâæèéëêìòöôœùüûç]\)\([A-Za-z0-9àäâæèéëêìòöôœùüûçÀÄÂÆßÈÉËÊÌÖÔŒÙÜÛ]*\)\>/\u\1\L\2/gc

似乎可以解决问题,在这里。

因为您在第一个字母捕获组中使用的范围内明确包含大写字符,所以您的模式将同时匹配 foo Foo。从该范围内删除大写字符似乎可以解决您的直接问题。

于 2012-12-21T13:54:41.053 回答
1

要仅匹配非大写单词,您希望匹配以 (a) 以小写字母开头或 (b) 以两个大写字母开头的单词。以下将做到这一点(添加重音字母和数字来品尝):

\b([A-Z])([A-Z][A-Za-z]*)|\b([a-z])([a-zA-Z]+)

但是有些单词在组\1and中匹配,而\2另一些在\3and中匹配\4。我不使用 vim,所以我不能说它是否会让你用这种模式代替。(例如,\u\1\3\L\2\4;四个中只有两个是非空的)

于 2012-12-22T02:59:01.357 回答