-1

字符串格式和预期结果..

>>>a = 'afd fdfe {a.b.c} fdferef {c.d.f}dfefe dfefffe + fdfef {}'
>>>{a.b.c},{c.d.f},{}

我尝试使用以下代码。结果是......

>>>re.search(r'{.*.}',a).group()
>>>{a.b.c} fdferef {c.d.f}dfefe dfefffe + fdfef {}'

其他

>>>re.search(r'{.?*.}',a).group()
>>>Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   File "/usr/lib/python2.7/re.py", line 146, in search
     return _compile(pattern, flags).search(string)
   File "/usr/lib/python2.7/re.py", line 251, in _compile
     raise error, v # invalid expression
   sre_constants.error: multiple repeat
4

2 回答 2

1

您似乎对 , 和 的含义.感到*困惑?

.是匹配单个字符的元字符(例如,a.{,或有时 - 但通常不是 - 换行符)。

*是一个重复前一个正则表达式零次或多次的元字符。(例如,.*匹配空字符串或所有内容,可能除了换行符。)

?作为一个单独的元字符重复前面的正则表达式零次或一次。(例如,.?不匹配任何字符或一个字符,同样可能除了换行符)。

还有组合;例如,*?表示重复零次或多次,但希望尽可能少地重复(“非贪婪”或“吝啬”匹配)。

圆括号用于分组;如果您想使用.group(),您可能应该在要提取的匹配项周围使用括号。

有了这个,试试

re.findall(r'(\{[^{}]*\})', a)

where[^{}]匹配不是花括号的单个字符,反斜杠转义花括号,否则它们也是用于指定特定重复次数的正则表达式元字符(例如,.{3}匹配三个任意字符,并\?{5,}匹配五个或更多文字问号)。

如果你想循环匹配,也许更喜欢生成器re.finditer()而不是re.findall().

于 2020-01-29T05:07:22.990 回答
0
a = ' 45 54 '
True
b = ' 45'
True
c = '45 '
True 
d = '45'
False
e = 'er 44 434'
False

想在词前和词后查找和检查空格

于 2020-02-05T09:23:41.823 回答