regex - 使用正则表达式在点后添加空格,不包括数字和链接字符串之间的点
问题描述
如果需要,我正在使用以下正则表达式(?<=[.,?!])(?=[^\s])(?![0-9])
在点之后添加一个空格(如果点在数字之间,则不包括标点符号后的空格)
进行搜索和替换时(替换为空格)。一切还好。唯一的问题是当我的字符串中有一些链接时。例如"https://test.com/87786"
,或者"/8787786.jpeg"
那里也正在添加一个空间。
关于如何更改我的表达式以排除在“。”之后添加空格的任何想法 在链接字符串中?
谢谢
解决方案
我认为您无法仅通过后视来实现它,因为我所知道的引擎都不支持可变长度后视。
您似乎想要做的是替换一个序列:
- 字符串的开头或不是斜线也不是点
- (非空)字母代码点序列
- 一个点
- 任何字母代码点
并在点后插入一个空格。可以通过将上面的描述转换成对应的正则表达式来实现,然后将前三个标记为捕获,第四个标记为另一个捕获(这是使用括号完成的),然后在替换字符串中使用它(有些引擎使用反斜杠数字来指示捕获应该去哪里,在这种情况下,替换将是"\1 \2"
.
您可能需要稍微调整第一个“开始”部分,并且您可能还需要多次替换,直到字符串稳定。否则.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]
这个正则表达式比我的第一个想法更好,因为它完全匹配你必须在其前面放置空格的单词和点。因此,您可以替换为"\0 "
并将空格添加到匹配的末尾。
推荐阅读
- php - vue.config.js:未解析的变量或类型模块 => 找不到 php 文件
- spring - 从 java.util.Date 通过 JPA/Hibernate 查询 Oracle DB
- bash - .bashrc 中的最后一个命令退出代码比较
- java - 如何在 JAVA 的每个特定部门中使用员工 ID 查找最高工资?
- javascript - 如何防止在 HTML 画布上绘制重叠(橡皮擦)?
- android - 如何设置aac文件比特率?
- java - 如何将列表中的单个实体映射到休眠中的字段
- r - 在 .Rprofile 中加载 tidyverse 时出现 tidyverse 问题
- panel - 用面板数据中每个 id 的参考值替换缺失值
- javascript - 无法从浏览器的本地存储中删除项目