我使用下面的正则表达式(?<=[。?!])(?=[^\s])(?![0-9])添加一个空格后的点,如果需要(排除在标点后,如果点在数字之间)
当执行搜索和替换(替换一个空间)。一切都好了。唯一的问题是当有一些链接在我的字符串。例如,“https://test。com/87786”或“/8787786。jpeg”也被添加在那里。
关于如何改变我的表达式排除在“。”后的链接字符串添加空格的任何想法?
谢谢
###我不认为你可以实现它只是向后看,因为没有引擎,我知道支持可变长度向后看。
你似乎想要做的是替换一个序列:
字符串的开始或不是斜杠或点
(非空)字母编码点序列
一个点
任何字母编码点
然后在点后面插入一个空格。你可以实现它通过上面的描述转换成相应的正则表达式,那么前三个标记为一个第四作为另一个捕获(这是使用括号),然后在替换字符串中使用它(一些引擎使用斜数字表明了应该去哪里在这种情况下,更换应该是" 1 " " 2"
您可能需要稍微调整第一个“开始”部分,您可能还需要替换几次,直到字符串变得稳定。Otherwise。strings。like。this。will。still。have。dots。
更新要求:
(?<=^|[^/.a-zA-Z])[a-zA-Z]+\.(?=[a-zA-Z])
以下是我的评论:
# positive lookbehind (fixed length) == "preceded by"
(?<= )
# start of string
^
# or
|
# any except for a slash or a dot or a letter
[^/.a-zA-Z]
# A word (one or more chaacters)
[a-zA-Z]+
# A dot (it needs to be escaped with a backslash)
\.
# positive lookahead == "followed by"
(?= )
# a letter
[a-zA-Z]
这个regexp比我的第一个想法更好,因为它完全匹配单词和前面必须放空格的点。所以你可以用"\0 "替换,并将空格添加到匹配的末尾。
参见https://regexr。com/65vb6示例。