匹配特定空格的正则表达式

时间:2010-10-20 14:02:19

标签: regex

我一直试图做这个正则表达式一段时间了。我想创建一个匹配文本所有空格的文本,但文字字符串除外。

例:

123 Foo“带空格的字符串”

123和Foo之间的空格匹配,以及Foo和“带空格的字符串”之间的空格,但只有那两个。

由于

3 个答案:

答案 0 :(得分:1)

一个常见的,简单的策略是计算在字符串中前往您所在位置的引号数。如果计数是奇数,则你在一个带引号的字符串内;如果金额是偶数,则您在引用的字符串之外。我无法想到在正则表达式中执行此操作的方法,但您可以使用此策略来过滤结果。

答案 1 :(得分:1)

您可以使用re.findall匹配字符串或空格,然后检查匹配项:

import re
hits = re.findall("\"(?:\\\\.|[^\\\"])*\"|[ ]", 'foo bar baz "another\\" test\" and done')
for h in hits:
    print "found: [%s]" % h

的产率:

found: [ ]
found: [ ]
found: [ ]
found: ["another\" test"]
found: [ ]
found: [ ]

一个简短的解释:

"          # match a double quote
(?:        # start non-capture group 1
  \\\\.    #   match a backslash followed by any character (except line breaks)
  |        #   OR
  [^\\\"]  #   match any character except a '\' and '"'
)*         # end non-capture group 1 and repeat it zero or more times
"          # match a double quote
|          # OR
[ ]        # match a single space

答案 2 :(得分:0)

如果这个 - >> 123 Foo“带有空格的字符串”< - 是您的结构,用于表示文字后跟引用文本的行,您可以创建2组引用文本和不带引号的文本,并分别处理它们

ex.regex - > {1}}其中$ 1应包含 - > 123 Foo< - 和$ 2 - >“带空格的字符串”< -

java示例。

(.*)(".*")

javascript示例。

    String aux = "123 Foo \"String with spaces\"";
    String regex = "(.*)(\".*\")";
    String unquoted = aux.replaceAll(regex, "$1").replace(" ", "");
    String quoted = aux.replaceAll(regex, "$2");
    System.out.println(unquoted+quoted);