Regex 使用简单的搜索/替换正则表达式在点和字符之间插入空格
我想通过在每个句点和字母之间插入空格来分隔句子,但不要在点和括号或点和逗号之间插入空格 考虑这一点:Regex 使用简单的搜索/替换正则表达式在点和字符之间插入空格,regex,replace,Regex,Replace,我想通过在每个句点和字母之间插入空格来分隔句子,但不要在点和括号或点和逗号之间插入空格 考虑这一点: 这是一段文字。文字之间有一些点。(多可爱啊)。 这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?问题是,它将匹配点和字符,替换将完全删除这两个字符。换句话说,这两个字符之间是否有匹配“nothing”的方法?未指明语言,我使用了PHP,但表达式非常通用,可以在其他环境中重用: <?php $s = 'This is
这是一段文字。文字之间有一些点。(多可爱啊)。
这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?问题是,它将匹配点和字符,替换将完全删除这两个字符。换句话说,这两个字符之间是否有匹配“nothing”的方法?未指明语言,我使用了PHP,但表达式非常通用,可以在其他环境中重用:
<?php
$s = 'This is a text.With some dots.Between words.(how lovely).';
$r = '~(\w)(\.)(\w)~';
echo preg_replace($r, '$1 $3', $s);
$msg =~ s/\.([a-zA-Z])/\. \1/g
在vim中(整个文件):
在VisualStudio中,它将是
\.([a-zA-Z])
在“查找内容:”中,以及
在“替换为:”
一般来说,大多数支持正则表达式搜索的编辑器通常都有捕获组,允许您存储匹配的表达式的一部分,并在替换文本中使用它。在上面的表达式中,
()
中的所有内容都是“捕获”的,我将其包含在\1
中,这段代码解决了您的问题:
preg_replace('/([a-zA-Z]{1})\.([a-zA-Z]{1})/', '$1. $2', 'This is a text.With some dots.Between words.(how lovely).');
您应该检测dot前后的任何字符,并用blanco替换。您可以在替换字符串中使用反向引用。通常它看起来像: 搜索正则表达式:
(\.)(\w)
替换模式(注意空格):
反向引用是对应组的替代
或者,您可以使用lookarounds:
(?<=\.)(?=\w)
(?来自OP:“这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?”@Cyborgx37是的,我在text mate中测试了它,其中搜索模式与(\w)(\)(\w)完全相同替换模式,比如$1$3,我不知道TextMate支持替换模式($1$3…),这很好。从OP中可以看出:“这可能有一些Perl或PHP的解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?”我认为你提到PHP和Perl让人感到困惑。你想要用这些语言的解决方案,还是在某个特定的文本编辑器中寻找解决方案?是的,很抱歉没有完全弄清楚这一点-我特别试图阻止使用PHP或Perl的解决方案,因为这些解决方案最终会有变量/替换字符串,而我我希望严格在文本编辑器中完成它。是的,这正是我想要的。所以它被称为“lookarounds”-现在我知道了。顺便说一句,它在TextMate中工作得非常好。谢谢你的这一课。这对于javascript来说也是完美的,只需稍加修改
preg_replace('/([a-zA-Z]{1})\.([a-zA-Z]{1})/', '$1. $2', 'This is a text.With some dots.Between words.(how lovely).');
(\.)(\w)
$1 $2
(?<=\.)(?=\w)