通过多个可能的分隔符拆分字符串

时间:2021-05-19 15:25:47

标签: python string split delimiter

我想将 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(';')

它有效但似乎不是一个好的做法或有用 - 特别是如果我将来添加更多分隔符。这样做的好方法是什么?

4 个答案:

答案 0 :(得分:2)

您可以使用 re.split 和 split on([ ] 是一个空格,括号仅用于显示)

[;,] ?|[ ]

模式匹配

  • [;,] ? 匹配 ;, 后跟一个可选空格
  • |
  • [ ] 匹配单个空格

Regex demo | Python demo

更严格的环视模式可以使用环视来断言左侧的数字。

(?<=\d)(?:[;,] ?| )(?=\d)

模式匹配:

  • (?<=\d) 正向后视,向左断言一个数字
  • (?: 交替的非捕获组
    • [;,] ? 匹配 ;, 后跟一个可选空格
    • |
    • 匹配一个空格
  • ) 关闭非捕获组
  • (?=\d) 正向预测,向右断言一个数字

Regex demo

示例代码

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']