我想根据标准空格 ""
进行拆分,但不使用转义空格 "\"
例如,对于字符串 'my name\is\max'
(单引号所以 \
是文字)
我想获取["my", "name\is\max"]
我试过这个正则表达式:/[^\\]\s/
但结果是这样的:
=> ["m", "name\\ is\\ max"]
这很接近,但我不知道如何在 my
中保留 y
编辑
作为另一个例子考虑这个字符串:
"./db/users/WGDl-HATof-uhdtT7sPfog: email=maxpleaner@gmail.com name=max\\ p"
我想把它分成三部分:
[
"./db/users/WGDl-HATof-uhdtT7sPfog:",
"email=maxpleaner@gmail.com",
"name=max\\ p"
]
最佳答案
关于
I'm trying to split on whitespace that is not preceeded by a backslash.
如果您只关心空格前的反斜杠并且没有其他需要考虑的特殊情况,请使用负向后视 (?<!\\)
之前 \s
:
s.split(/(?<!\\)\s/)
在这里,\s+
如果前面没有反斜杠,则匹配 1+ 个空格((?<!\\)
是一个负向后视,它检查当前位置左侧的文本是否与模式匹配,如果是,则匹配失败) .
如果需要考虑多个空格,并且需要处理转义序列,请使用
s.scan(/(?:[^\s\\]|\\.)+/)
参见 Ruby demo
在这里,(?:[^\s\\]|\\.)+
匹配除反斜杠和空格 ( [^\s\\]
) 或任何转义序列 ( \\.
) 之外的 1 个或多个字符。添加/m
修饰符 .
也匹配换行符。
关于ruby - 正则表达式拆分空白但不转义空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579214/