我有以下字符串示例:
'NAME: "test1", DESCR: "AAA 1111S ABC 48 BB (4 BBBB) TEST1 "'
我正在尝试提取“ AAA 1111S”,但正在努力知道我在正则表达式中做错了什么?
我正在使用的正则表达式如下,我认为它将基于第一个空格然后第二个空格加上字符串中的剩余字符来工作。
^.+(AAA\s.+)\s.+"$
但是它只会拉出以下内容:
AAA 1111S ABC 48 BB(4 BBBB)测试1
答案 0 :(得分:0)
在正则表达式中,您使用(AAA\s.+)
,其中.+
将匹配任何字符1次以上。它将一直匹配到字符串的结尾。 \s.+"$
之后的部分将与TEST1 "
您可以在(?<=")
后使用正向断言来断言左侧是双引号。然后匹配AAA,再加上1+倍的空白字符\s+
,再加上1+倍的非空白字符\S+
。
(?<=")AAA\s+\S+
如果要保留锚^并从第一次出现AAA开始匹配,可以使用.+?
来匹配1倍以上非贪婪字符。
^.+?(AAA\s+\S+)
答案 1 :(得分:0)
>>> import re
>>> string = 'NAME: "test1", DESCR: "AAA 1111S ABC 48 BB (4 BBBB) TEST1
>>> sol = re.findall('\w{3}\s\w{5}',string)
>>> sol
['AAA 1111S']