我知道这听起来像是一个重复的问题,但我对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])之间的区别。
答案 0 :(得分:1)
您的正则表达式不包含捕获组。替换模式中的\1
是正则表达式模式内捕获组的反向引用。如果该组不存在,则会弹出错误。
您似乎想要在小写字母之前替换1+换行符。确保您的设置如下:
正则表达式为:\h*\R+([a-z])
(其中\h*
匹配0 +水平空格,\R+
匹配任何 1+换行符,CRLF/LF/CR
和([a-z])
匹配小写ASCII字母)
替换: \1
(其中\1
放回第1组值)
设定:
请注意,也必须启用区分大小写。
答案 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