Skip to main content
 首页 » 编程设计

python之有没有一种匹配模式或字符串开头的好方法

2025年05月04日2198°冷暖

我想找到所有数字:

  1. 在“#”之后
  2. 一开始

例如,

>>> s = '1___2___#3___@4___##5' 

结果应该是

['1', '3', '5'] 

我现在拥有的是

>>> re.findall('#(\d)', s)          # ['3', '5'] 

和

>>> re.findall('^(\d)', s)          # ['1'] 

但我不知道如何将它们组合成一个正则表达式。感谢您的帮助。

请您参考如下方法:

保持简单...

re.findall优先考虑捕获组。所以把前面的 ^ (起始 anchor )和#在非捕获组中。

>>> s = '1___2___#3___@4___##5' 
>>> re.findall('(?:^|#)(\d+)', s) 
['1', '3', '5'] 

或

简单多了..

>>> s = '1___2___#3___@4___##5' 
>>> re.findall('(?<![^#])\d+', s) 
['1', '3', '5'] 

DEMO

上面的正则表达式是这样工作的...

  • (?<!.)\d+匹配前面没有字符的所有数字(换行符除外)。所以这必须匹配开头出现的数字,因为开头的仅满足此条件。

  • (?<![^#])\d+再次更进一步,此正则表达式将匹配开始时出现的数字,因为 [^#]消耗一个字符,它还匹配所有前面没有不属于 # 的字符的数字.