考虑一个字符串s = "aa,bb11,22 , 33 , 44,cc , dd "
。Python(Perl型)正则表达式lookahead/lookbehind
我想s
拆分为使用令牌下面的列表中regular expressions module在Python的,这是类似于Perl中提供的功能:
"aa,bb11"
"22"
"33"
"44,cc , dd "
注:
- 我想tokenise上逗号,但只有在这些逗号有号码两侧。
- 任何(可选)围绕我所针对的这些“数字逗号”应该在结果中删除空格。可选的空格可能不止一个空格。
- 任何其他空格应该保留原来的字符串中。
我迄今为止最好的尝试是:
import re
pattern = r'(?<=\d)(\s*),(\s*)(?=\d)'
s = 'aa,bb11,22 , 33 , 44,cc , dd '
print re.compile(pattern).split(s)
但这打印:
['aa,bb11', '', '', '22', ' ', ' ', '33', ' ', ' ', '44,cc , dd ']
这是接近我想要的东西,因为在4个事情要载在列表中。我可以通过并摆脱任何空字符串和任何只包含空格/逗号的字符串,但我宁愿有一个单行的正则表达式来完成这一切。
任何想法?
@Ωmega再看一遍。这不是两个都做,它使用正则表达式分割。否则什么是分裂? – mVChr 2012-07-22 16:17:44
@megamega split是一个正则表达式,但findall也是如此。斯普利特是被要求的。经过两次测试,无论两者是否“足够快”,即使调整了较慢的编译时间,您的方法也会比mVChr更慢。 – 2012-07-22 16:55:48