Python正则表达式用于以下表达式

时间:2015-04-08 17:55:06

标签: python regex

我有字符串

s = 'const char * const xyz = \"abc\"'

我想要运行正则表达式。

我正在使用

match = re.search(r'const char * const (\w+) = (\w+)', s)

要捕捉字符串的xyzabc部分,但我要回复None个对象

我做错了什么

2 个答案:

答案 0 :(得分:1)

您没有匹配字符串文字中的双引号。下面的代码修复了这个问题。

import re
s = 'const char * const xyz = \"abc\"'
match = re.search(r'const char \* const (\w+) = \"(\w*)\"', s)

但是,您只需将字符串文字与[0-9a-zA-Z_]匹配\w。以下是更具包容性。它匹配任何不是双引号直到下一个双引号的东西:

match = re.search(r'const char \* const (\w+) = \"([^\"]*)\"', s)

但它不会匹配嵌入双引号的字符串,例如'The \"Black Crowes\" played in L.A. last weekend.'要做类似的事情,请尝试:

match = re.search(r'const char \* const (\w+) = \"((\\?.)*?)\"', s)

>>> match.group(1)
'xyz'
>>> match.group(3)
'abc'

"开始:这匹配字符串文字的开头双引号。 ((\\?.)*?):懒惰匹配斜杠加上另一个字符(或只是另一个字符)0次或更多次,直到我们遇到"

答案 1 :(得分:0)

您需要指定双引号:

>>> re.findall(r'(\w+)\s=\s"(\w+)"',s)
[('xyz', 'abc')]

或使用re.search

>>> p=re.search(r'(\w+)\s=\s"(\w+)"',s)
>>> p.group(1)
'xyz'
>>> p.group(2)
'abc'