python re.split() 以空格、逗号和句点分隔,但在 1,000 或 1.50 等情况下则不行

标签 python regex

我想使用 python re.split() 将字符串按空格、逗号和句点拆分为单个单词。但我不希望将 "1,200" 拆分为 ["1", "200"]["1.2"] 以被拆分成 ["1", "2"].

例子

l = "one two 3.4 5,6 seven.eight nine,ten"

结果应该是["one", "two", "3.4", "5,6", "seven", "eight", "nine", "ten"]

最佳答案

使用否定的前瞻和否定的后瞻:

> s = "one two 3.4 5,6 seven.eight nine,ten"
> parts = re.split('\s|(?<!\d)[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten']

换句话说,你总是用 \s 分割。 (空格),并且只有在 not 后跟 (?!\d) 时才用逗号和句点分隔或在 (?<!\d) 之前一个数字。

DEMO

编辑:根据@verdesmarald 的评论,您可能希望改用以下内容:

> s = "one two 3.4 5,6 seven.eight nine,ten,1.2,a,5"
> print re.split('\s|(?<!\d)[,.]|[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten', '1.2', 'a', '5']

这将拆分 "1.2,a,5"进入 ["1.2", "a", "5"] .

DEMO

关于python re.split() 以空格、逗号和句点分隔,但在 1,000 或 1.50 等情况下则不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683201/

相关文章:

python - 使用 beautifulsoup 进行解析以获得准确的单词

python - 如何验证模型中的多个字段中至少有一个不为空

python - Scrapy shell 没有 hxs 或 xxs 作为可用对象

javascript - 匹配以特定单词开头和结尾的所有摘录

sql - 如何删除 oracle 中破折号后的文本?

python - 如何将一种类型的标签替换为另一种类型的标签 (<a ...>..</a> => <p>..</p>)

python - 在python中删除指数格式的前导0

php - 将带有两个定界符的字符串转换为平面关联数组

javascript - 正则表达式匹配除 AND、OR 和 NOT 之外的所有单词

Java 正则表达式与换行符不匹配