python - 通过多个可能的分隔符分割字符串

标签 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('[;, ]', s) 尝试了 re.split() 函数,该函数可以使用单个字符作为分隔符,但失败否则。

但是我可以

s.replace('; ', ';').replace(', ', ';').replace(',', ';').replace(' ', ';')
s.split(';')

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

最佳答案

您可以使用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']

关于python - 通过多个可能的分隔符分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67606214/

相关文章:

python - 有没有办法在 Python 中多次格式化一个字符串?

java - String 类中的空构造函数

python - pandas 多个条件并添加多列

python - 如何在 Telegram 上根据文件 ID 发送文件

c - 将二进制读入字符串c

regex - 根据不同的开始和结束分隔符将文件拆分为多个文件

sql - 如何拆分分隔字符串以便可以访问单个项目?

C# 字符串拆分 - 无结束分隔符

python - Simplejson 转储和加载不返回有效字典

python - 如何用Python编写过滤函数