我想知道什么是最简单的方法(可能是正则表达式)以下面的方式分隔字符串中的数字。 例子:"abc12de34f5"
到:["abc", "12", "de", "34", "f", "5"]
蟒蛇在字符串中分割数字
但是如果一起选择标记的字符串单独这样: 例子:"abc1,2de3.4f5"
到:["abc", "1,2", "de", "3.4", "f", "5"]
感谢您的任何建议和意见
我想知道什么是最简单的方法(可能是正则表达式)以下面的方式分隔字符串中的数字。 例子:"abc12de34f5"
到:["abc", "12", "de", "34", "f", "5"]
蟒蛇在字符串中分割数字
但是如果一起选择标记的字符串单独这样: 例子:"abc1,2de3.4f5"
到:["abc", "1,2", "de", "3.4", "f", "5"]
感谢您的任何建议和意见
>>> import re
>>> s = "abc12de34f5"
>>> re.findall(r'[\d\W]+|[a-zA-Z]+', s)
['abc', '12', 'de', '34', 'f', '5']
>>> t = "abc1,2de3.4f5"
>>> re.findall(r'[\d\W]+|[a-zA-Z]+', t)
['abc', '1,2', 'de', '3.4', 'f', '5']
使用itertools.group的非正则表达式解决方案
>>> st = "abc1,2de3.4f5"
>>> [''.join(v) for _, v in groupby(st,key = str.isalpha)]
['abc', '1,2', 'de', '3.4', 'f', '5']
>>> st = "abc12de34f5"
>>> [''.join(v) for _, v in groupby(st,key = str.isalpha)]
['abc', '12', 'de', '34', 'f', '5']
谢谢@Abhijit,工作正常,但是我需要在unicode文本(cyrilic)上做到这一点,任何想法如何?谢谢 – 2013-02-22 11:02:01
@BoldO:尝试'unicode.isalpha'而不是'str.isalpha'(如果使用Py2.X) – Abhijit 2013-02-22 11:13:52
作品,非常感谢@Abhijit! – 2013-02-22 11:17:36
@eumiro:好的电话。固定。 – 2013-02-22 10:28:36
谢谢@Joel Cornett,工作正常,但是我需要在unicode文本(cyrilic)上做到这一点,在这种情况下如何使用regula表达式? 我想你[a-яА-Я]将不起作用。谢谢 – 2013-02-22 10:59:57
@BoldO:虽然你可能需要做几个范围(即'[a-zA-ZÀ-ῼ]')来匹配你想要的字符,你可以修改任何字符范围的'[a-z]'。另外,请确保在're.findall()'上指定're.UNICODE'标志,以使'\ d'和'\ W'正常工作。 – 2013-02-22 18:14:18