2015-01-21 138 views
0

我有一个巨大的文本文件,其中包含大量小写字母与大写字母组合的拼写错误,但仅与字母“l”(小写字母L)并且仅包含大写字母,这种形式:搜索并替换大写字符串中的字符

VERONlCA, SPEAKlNG, lMITATlON, ENGLlSH

所以我想只有一个大写的字内更换所有字符“L”(小写L)(因为有大量的含小写字母“L”,以及以正常方式小写的话),其中前一个字符是大写字母,连续字符也是大写字母。类似于[AZ] [l] [AZ]并用大写字母'I'代替小写字母'L'(如在MIKE中),但保持大写字母的其余部分完整,并且不影响小写字母的整个剩余部分文件(所以'想象'不会成为'ImagInation')。

我正在使用查找和替换框,所以我应该在查找框中键入什么以及应该在替换框中键入什么?

回答

0

([A-Z]|\b)l([A-Z])替换为\1L\2。斜杠参考组。

它也可能是$1L$2取决于程序。

+0

感谢或你的回应,但是你的表达也选择小写的字符串,例如CLEV ** ela ** nd,就好像它没有强制执行大写的情况。另外,小写字母L开始一个单词,如** lM ** AGINATION?我想,它应该查找[任何大写]和(小写L)或(小写L)和[任何大写] – mistervela 2015-01-21 08:08:56

+0

@mistervela你正在使用什么文本编辑器?您可能需要勾选区分大小写。 – simonzack 2015-01-21 08:50:37

+0

当然,谢谢。我想到了。我发布了答案,也许你会知道如何组合这两个表达式。 – mistervela 2015-01-21 09:44:11

0

我发现无论您用来搜索和替换的软件都必须选中“匹配大小写”。

首先,我结束了使用两个正则表达式的命令:

查找

([A-Z])l([A-Z]+) 

$1I$2 

替换这一个可以确保的变化只对大写单词被执行时,小写词将完全避免,因为[AZ] +将确保小写字母L旁边的连续字符处于大写状态,没有它时,它也会匹配小写字母。

(l)([A-Z]+) 

I$2 

更换,以确保它会匹配与小写开头L.

我敢肯定有办法,我可以结合这两种在一个命令,但我不知道。

0

如果你想处理开头和结尾l,你可以这样做:

查找:\b(?:([A-Z]+)l([A-Z]+)|l([A-Z]+)|[A-Z]+l)\b
替换:\U$0

+0

太好了,谢谢。然而,你的表达并不强制搜索只能在大写单词中进行,所以我添加了这部分[AZ] +像这样:(?<= [AZ])l([AZ] +)|([AZ] +)l(?= [AZ]),现在它工作。 – mistervela 2015-01-21 10:32:34

+0

@mistervela:它只在前面或后面跟着一个大写或两者,即。 'ABCl'或'lDEF'或'ABClDEF',是不是你想要的? – Toto 2015-01-21 10:37:01

+0

是的,但是你的表达式并不仅仅用大写字母进行搜索,而是在小写字母L出现的地方包含所有大写字母和小写字母:abclef和ABClEF。这就是为什么通过添加[A-Z] +确保单词的其余部分只有大写字母。你的回答很好,因为它结合了我试图执行的两个命令(对于开始和尾部小写的L) – mistervela 2015-01-21 10:55:26