我想找到所有数字:
- 在“#”之后
- 一开始
例如,
>>> 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']
上面的正则表达式是这样工作的...
(?<!.)\d+匹配前面没有字符的所有数字(换行符除外)。所以这必须匹配开头出现的数字,因为开头的仅满足此条件。(?<![^#])\d+再次更进一步,此正则表达式将匹配开始时出现的数字,因为[^#]消耗一个字符,它还匹配所有前面没有不属于#的字符的数字.
