正则表达式查找一个小写字母后面跟着一个大写字母

3

我在使用TextWrangler中的正则表达式(Grep)时遇到了困难,无法找到小写字母后面紧跟大写字母的情况,例如:

这个公告meansStudents欢迎。

实际上,我想通过添加冒号来分割这种情况,以便变成means: Students

我已经尝试过:

[a-z][A-Z]

但是这个表达式在TextWrangler中不起作用。
*编辑:以下是出现这些情况的确切上下文(我指的是只有这些字体颜色)。*
<font color =#48B700>  - Stột jlăm wẻ baOne hundred and three<br></font>

<font color =#C0C0C0>     »» Qzống pguộc lyời ba yghìm fảy dyổiTo live a life full of vicissitudes, to live a life marked by ups and downs<br></font>

"baOne" and "dyổiTo" must be "ba: One" and "dyổi: To" 

有人能帮忙吗?非常感谢。

4个回答

3

我相信(虽然手头没有TextWrangler),你需要搜索([a-z])([A-Z])并将其替换为:\1: \2

希望这能帮到你。


不是的!它只是查找任何相邻的字母。 - Niamh Doyle
1
任何相邻的字母,即使是两个小写字母?那么也许您需要勾选“区分大小写”的框吗? - Igor Korkhov
这正是问题所在。非常感谢!但现在它又出现了另一个问题:它找到并替换了所有的值,甚至是不想要的“FileMaker”变成了“File: Maker”。 - Niamh Doyle
很遗憾,您没有描述您的文本性质。当然,我建议的表达式是寻找任何大写字母后面的小写字母,而不考虑任何上下文。也许如果您给我们一个文本示例,我们将能够提供更好的解决方案。 - Igor Korkhov
仍然不清楚冒号前后应该分开哪些内容,哪些内容应该保持不变。 - Igor Korkhov
嗯,Igor,在这两个font-color标签之间,有一个小写字母后跟随大写字母需要用冒号分隔。除了这两个font-color标签之外的所有其他出现都保持不变。 - Niamh Doyle

2
这个问题已经存在很久了,但我偶然发现它,所以其他人也可能会遇到。OP对Igor的回答进行了澄清,并解释了任务的描述方式(可以添加到描述中)。
为了仅匹配HTML中那些特定字体的行,请使用以下替换:

(?<=<font color =#(?:48B700|C0C0C0)>)(.*?[a-z])([A-Z])

替换为\1: \2

解释:

  • (?<=[fixed-length regex])正向后查找,意思是“如果我的匹配刚刚在它之前”
  • (?:48B700|C0C0C0)是一个未命名的组,用于仅匹配2种颜色。由于它们具有相同的长度,因此它们适用于后向查找(需要具有固定长度)
  • (.*?[a-z])([A-Z])将匹配那些开始字体标记后面的所有内容,直到大写字母。
  • \1:\2替换与Igor的响应相同,只是\1将匹配需要分隔的整个第一个字符串。

补充:

您的输入字符串包含特殊字符,您想要拆分的部分很可能以一个特殊字符结尾。在这种情况下,它们不会被[a-z]单独捕获。您需要添加一个字符范围,以捕获所有您关心的字母,例如

(?<=<font color =#(?:48B700|C0C0C0)>)(.*?[a-zḁ-ῼ])([A-Z])


2

([a-z])([A-Z])替换为\1:\2 - 我没有TextWrangler,但在Notepad++上可以使用。

括号用于捕获数据,在替换字符串中使用\1语法引用。


谢谢,Amarghosh。但它仍然不起作用。无论如何,我的文档包含HTML标记,而表达式似乎包括字体标记之间的所有内容。 - Niamh Doyle
谢谢,但在TextWrangler中仍然没有运气。我没有Mac版的Notepad++来尝试。 - Niamh Doyle

0

这是正确的模式来识别小写字母和大写字母,但是,在查找/替换对话框中,您需要检查匹配是否区分大小写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接