Python正则表达式非捕获问题?

时间:2010-11-09 18:11:42

标签: python regex

我试图从字符串中除引号之外的所有引用(“或”)子串。 我想出了这个:

"((?:').*[^'](?:'))|((?:\").*[^\"](?:\"))"

由于某种原因,匹配的字符串中仍包含引号。 有什么理由吗?

此致,nikita.utiu。

3 个答案:

答案 0 :(得分:1)

你可以用前瞻和后瞻性的断言来做到这一点:

>>> match = re.search(r"(?<=').*?(?=')", "a 'quoted' string. 'second' quote")
>>> print match.group(0)
quoted

答案 1 :(得分:0)

使用非捕获组并不意味着根本不捕获它们。他们只是不像普通组那样创建单独的捕获组。

但正则表达式的结构要求引号是匹配的一部分:

"('[^']*'|\"[^\"]*\")"

然后在使用matched_string[1:-1]处理匹配的部分时删除周围的引号。

答案 2 :(得分:0)

你可以尝试:

import shlex
...
lexer = shlex.shlex(your_input_string)

quoted = [piece.strip("'\"") for piece in lexer if piece.startswith("'") or piece.startswith('"')]

shlex(词法分析)为您处理转义报价。虽然请注意它不适用于unicode字符串。