我有字符串
s = 'const char * const xyz = \"abc\"'
我想要运行正则表达式。
我正在使用
match = re.search(r'const char * const (\w+) = (\w+)', s)
要捕捉字符串的xyz
和abc
部分,但我要回复None
个对象
我做错了什么
答案 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'