我想将 str
解析为 float
值列表,但是我想灵活处理我的分隔符。具体来说,我希望能够使用其中任何一个
s = '3.14; 42.2' # delimiter is '; '
s = '3.14;42.2' # delimiter is ';'
s = '3.14, 42.2' # delimiter is ', '
s = '3.14,42.2' # delimiter is ','
s = '3.14 42.2' # delimiter is ' '
我想删除所有空格,但这会禁用最后一个版本;我通过执行 re.split()
尝试了 re.split('[;, ]', s)
函数,该函数可以使用单个字符作为分隔符,但否则会失败。
不过我可以
s.replace('; ', ';').replace(', ', ';').replace(',', ';').replace(' ', ';')
s.split(';')
它有效但似乎不是一个好的做法或有用 - 特别是如果我将来添加更多分隔符。这样做的好方法是什么?
答案 0 :(得分:2)
您可以使用 re.split 和 split on([ ]
是一个空格,括号仅用于显示)
[;,] ?|[ ]
模式匹配
[;,] ?
匹配 ;
或 ,
后跟一个可选空格|
或[ ]
匹配单个空格更严格的环视模式可以使用环视来断言左侧的数字。
(?<=\d)(?:[;,] ?| )(?=\d)
模式匹配:
(?<=\d)
正向后视,向左断言一个数字(?:
交替的非捕获组
[;,] ?
匹配 ;
或 ,
后跟一个可选空格|
或
匹配一个空格)
关闭非捕获组(?=\d)
正向预测,向右断言一个数字示例代码
import re
strings = [
"3.14; 42.2",
"3.14;42.2",
"3.14, 42.2",
"3.14,42.2",
"3.14 42.2"
]
for s in strings:
print(re.split(r"[;,] ?| ", s))
输出
['3.14', '42.2']
['3.14', '42.2']
['3.14', '42.2']
['3.14', '42.2']
['3.14', '42.2']
答案 1 :(得分:0)
我认为你可以像这样解释最后一个空格:
re.split(r'[;,]\s*', s)
此处 \s*
将捕获分隔符后的空格(如果有)。
答案 2 :(得分:0)
也可以这样做:
res = re.split('; |;|,|, | ', data)
见https://www.geeksforgeeks.org/python-split-multiple-characters-from-string/
答案 3 :(得分:0)
假设您提前知道输入的分隔符,您可以编写一个函数,将您的分隔符作为参数,用空格替换并拆分它:
def split_on_delim(strng, delim):
return strng.replace(delim, ' ').split()
例如:
>>> s = '3.14; 42.2'
>>> split_on_delim(s, '; ')
['3.14', '42.2']