如果后跟小写

时间:2017-03-08 14:49:53

标签: regex sublimetext3

我知道这听起来像是一个重复的问题,但我对Regex来说相对较新,并且不太了解其他一些答案。我之前用

之类的东西设法让它工作
Find: \n+[(a-z)] 
Replace: *space*\1 

我无法记住我使用的确切术语,现在如果我尝试将后续字母删除,并且在线正则表达式测试者说替换中的\ 1是无效的表达式。

E.g。

I 
want
this
To remove
Newlines

应该成为

I want this 
To remove
Newlines

但正在成为

I ant his
To remove
Newlines

我不记得我第一次使用的是什么,但我禁用了#34;整个单词" sublime中的选项,并以某种方式设法删除换行符而不切换字符。为什么\ 1无效?我是否使用" +"还有什么区别?或不?我真的不明白贪婪的含义。对不起,谢谢!

编辑:感谢所有回复!我肯定还有更多关于更灵活地使用正则表达式的知识,但在这种情况下,我错过了[(a-z)]和([a-z])之间的区别。

2 个答案:

答案 0 :(得分:1)

您的正则表达式不包含捕获组。替换模式中的\1是正则表达式模式内捕获组的反向引用。如果该组不存在,则会弹出错误。

您似乎想要在小写字母之前替换1+换行符。确保您的设置如下:

正则表达式为:\h*\R+([a-z])(其中\h*匹配0 +水平空格,\R+匹配任何 1+换行符,CRLF/LF/CR([a-z])匹配小写ASCII字母)
替换: \1(其中\1放回第1组值)

设定:

enter image description here

请注意,也必须启用区分大小写。

答案 1 :(得分:0)

你可以这样做

(?: )?[\n\r]([a-z])

并用$1(空格,后跟$1)替换出现,请参阅a demo on regex101.com

<小时/> 说明:

(?: )?  # Looks for a space, this is optional
[\n\r]  # newline
([a-z]) # a character between a and z, lowercase