我们如何匹配以下字符串中的空格(\ s +)
input:
string [element] [element] ...
example:
| | | | | |
test wow "I have space" I\ also\ have
| |<-match this | |<-but not this | |<-and not this
[element]里面可以包含空格,但它只会出现以下两种情况之一:
元素被“
包围示例:“我有很多空间”
空格已转义
示例:我有\ white \ spaces \ \
thg435 :
对我的问题的简单描述匹配一个空格,除非它在引号中或转义?
答案 0 :(得分:2)
查找未转义空格的最佳方法 是使用'负面的后观断言'。
(?<![\])\s
查找不在引号内的空格有点棘手。 最好的方法是找到不在引号内的文本并从中提取空格。
要提取引用文本,您可以使用以下表达式:
"[^"]*"
如果你想把它组合起来, 我建议这样做:
答案 1 :(得分:0)
我认为你正在寻找这样的东西:
(?<!\\) (?=[^"]*("[^"]*"[^"]*)*$)
python中的示例:
import re
test = r'abc def "quoted string" and "another one" and escaped \ space'
rx = r'(?<!\\) (?=[^"]*("[^"]*"[^"]*)*$)'
print test
print re.sub(rx, '_', test)
结果:
abc def "quoted string" and "another one" and escaped \ space
abc_def_"quoted string"_and_"another one"_and_escaped_\ space