在相邻字符串的特殊字符之间添加 space
Adding space between special chars to adjacent string
我正在使用 Sublime 正则表达式来转换如下文本:
test! one.two .three; four, five . six. .seven
看起来像:
test ! one . two . three ; four , five . six . . seven
当我尝试使用捕获组并替换 (\w)([^\w\s]+)|([^\w\s]+)(\w)
使用:
(注意 space),字符串完全混乱,一些字符被删除。
test ! one .two hree ; four , five . six . even
奇怪的是,当我分别跳过流水线和 运行 命令(替换 (\w)([^\w\s]+)
后跟 ([^\w\s]+)(\w)
的不同替换)时,结果如预期。
如何管道化 ("or") 正则表达式变体并保持分组?
谢谢!
您正在使用交替使用 4 个捕获组。
查看示例数据,另一种选择可能是使用 2 个捕获组:
(\w+)\h*([^\w\s]+(?:\h+[^\w\s]+)*)\h*
说明
(\w+)
捕获 组 1,匹配 1+ 个单词字符
\h*
匹配0+水平白色space个字符
(
捕获 第 2 组
[^\w\s]+
匹配除单词或白色以外的任何字符space char
(?:\h+[^\w\s]+)*
用 1+ 个水平白色 space 字符重复前面的
)
关闭组 2
\h*
匹配 0+ 尾随水平白色space 个字符。
在替换中使用
之前(使用 Sublime 3)
之后
或者您可以使用环顾四周来查找可以添加 space: 的位置
(?<=\w)(?=[^\w\s])|(?=\w)(?<=[^\w\s])
仅使用 asertshuns (?<=[^\w\s])(?=\w)|(?<=\w)(?=[^\w\s])
替换为 space
我正在使用 Sublime 正则表达式来转换如下文本:
test! one.two .three; four, five . six. .seven
看起来像:
test ! one . two . three ; four , five . six . . seven
当我尝试使用捕获组并替换 (\w)([^\w\s]+)|([^\w\s]+)(\w)
使用:
(注意 space),字符串完全混乱,一些字符被删除。
test ! one .two hree ; four , five . six . even
奇怪的是,当我分别跳过流水线和 运行 命令(替换 (\w)([^\w\s]+)
后跟 ([^\w\s]+)(\w)
的不同替换)时,结果如预期。
如何管道化 ("or") 正则表达式变体并保持分组?
谢谢!
您正在使用交替使用 4 个捕获组。
查看示例数据,另一种选择可能是使用 2 个捕获组:
(\w+)\h*([^\w\s]+(?:\h+[^\w\s]+)*)\h*
说明
(\w+)
捕获 组 1,匹配 1+ 个单词字符\h*
匹配0+水平白色space个字符(
捕获 第 2 组[^\w\s]+
匹配除单词或白色以外的任何字符space char(?:\h+[^\w\s]+)*
用 1+ 个水平白色 space 字符重复前面的
)
关闭组 2\h*
匹配 0+ 尾随水平白色space 个字符。
在替换中使用
之前(使用 Sublime 3)
之后
或者您可以使用环顾四周来查找可以添加 space: 的位置
(?<=\w)(?=[^\w\s])|(?=\w)(?<=[^\w\s])
仅使用 asertshuns (?<=[^\w\s])(?=\w)|(?<=\w)(?=[^\w\s])
替换为 space