我期望能够将字符串拆分为任何不是数字或点的列表。目前的分裂方法只提供了一个正确匹配的方式来分裂,是一个正则表达式在这种情况下采取的最佳途径?围绕任何未指定字符拆分字符串
例如,给定字符串"10.23, 10.13.21; 10.1 10.5 and 10.23.32"
这应该返回列表['10.23', '10.13.21', '10.1', '10.5', '10.23.32']
因此我认为最好的正则表达式使用在这种情况下会... [\d\.]+
这是最好的方法处理这种情况?
我期望能够将字符串拆分为任何不是数字或点的列表。目前的分裂方法只提供了一个正确匹配的方式来分裂,是一个正则表达式在这种情况下采取的最佳途径?围绕任何未指定字符拆分字符串
例如,给定字符串"10.23, 10.13.21; 10.1 10.5 and 10.23.32"
这应该返回列表['10.23', '10.13.21', '10.1', '10.5', '10.23.32']
因此我认为最好的正则表达式使用在这种情况下会... [\d\.]+
这是最好的方法处理这种情况?
如果你正在考虑re.findall
:您可以使用re.split
与您正则表达式的反相版本:
In [1]: import re
In [2]: s = "10.23, 10.13.21; 10.1 10.5 and 10.23.32"
In [3]: re.split(r'[^\d\.]+', s)
Out[3]: ['10.23', '10.13.21', '10.1', '10.5', '10.23.32']
谢谢!这正是我所寻找的,我不介意使用正则表达式,它只是一个额外的复杂程度来获得匹配,然后建立我自己的列表,这是我想避免的,所以这是完美的。 – EEP
如果你想比正则表达式其他的解决方案,你可以使用str.translate
和翻译比'.'
其他一切成空白做出split()
In [69]: mystr
Out[69]: '10.23, 10.13.21; 10.1 10.5 and 10.23.32'
In [70]: mystr.translate(' '*46 + '. ' + '' + ' '*198).split()
Out[70]: ['10.23', '10.13.21', '10.1', '10.5', '10.23.32']
希望呼叫这有助于
一个可以说是更好的可读形式的东西@ inspectorG4dget建议:
>>> import string
>>> s = '10.23, 10.13.21; 10.1 10.5 and 10.23.32'
>>> ''.join(c if c in set(string.digits + '.') else ' ' for c in s).split()
['10.23', '10.13.21', '10.1', '10.5', '10.23.32']
这样就可以避免正则表达式,这往往是一个好主意,当你可以相当容易地。
我同意一个正则表达式似乎是在这种情况下最适合的。 – BoppreH