Python regex非捕获问题?

2024-04-25 20:55:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个不包括引号的字符串中获取所有带引号(“or”)的子字符串。 我想到了这个:

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

由于某些原因,匹配字符串中仍然包含引号。 有什么原因吗?在

真诚的,尼基塔乌提. 在


Tags: or字符串原因引号
3条回答

您可以使用lookahead和lookback断言:

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

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

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

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

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

你可以试试:

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

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

shlex(词法分析)为您处理转义引号。不过,请注意,它不适用于unicode字符串。在

相关问题 更多 >