我想将 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('[;, ]', s)
尝试了 re.split()
函数,该函数可以使用单个字符作为分隔符,但失败否则。
但是我可以
s.replace('; ', ';').replace(', ', ';').replace(',', ';').replace(' ', ';')
s.split(';')
这有效,但似乎并不是一个好的做法或有用 - 特别是如果我将来添加更多的分隔符。执行此操作的好方法是什么?
最佳答案
您可以使用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']
关于python - 通过多个可能的分隔符分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67606214/