正则表达式匹配多个案例

时间:2014-01-28 08:25:10

标签: regex

我们如何匹配以下字符串中的空格(\ s +)

input: 
       string [element] [element] ...
example:
          |   |               |  |               |  |  
       test   wow       "I have  space"    I\ also\ have
          |   |<-match this   |  |<-but not this |  |<-and not this

[element]里面可以包含空格,但它只会出现以下两种情况之一:

  1. 元素被“

    包围

    示例:“我有很多空间”

  2. 空格已转义

    示例:我有\ white \ spaces \ \

  3. thg435

    对我的问题的简单描述

    匹配一个空格,除非它在引号中或转义?

2 个答案:

答案 0 :(得分:2)

查找未转义空格的最佳方法 是使用'负面的后观断言'。

(?<![\])\s

查找不在引号内的空格有点棘手。 最好的方法是找到不在引号内的文本并从中提取空格。

要提取引用文本,您可以使用以下表达式:

"[^"]*"

如果你想把它组合起来, 我建议这样做:

  1. 将字符串拆分为其引用和未引用的部分。
  2. 使用第一个(使用断言)检查未加引用的部分。
  3. 从引用部分中提取空格。

答案 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