在数字/非数字边界上拆分字符串

2024-10-02 20:44:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将一个字符串拆分为一个列表(Python),其中每个段要么是全数字的,要么是全非数字的

实例

  • '100.200.300'给出了{}
  • 'abc0foo!bar'给出{}
  • '123'给出了{}
  • 'foo'给出了{}

输入可能以数字部分或非数字部分开始或结束。当在""上加入时,结果必须完整地再现原始输入

如果我在例如\d+上拆分,那么我将保留非数字部分,并丢失数字部分。我可以在^(\d+|\D+)(.*)$上循环,但那很烦人

我可以(在单个表达式中)在边界上拆分并在结果列表中保留所有字符串部分和非字符串部分吗


Tags: 实例字符串列表foo表达式bar数字边界
1条回答
网友
1楼 · 发布于 2024-10-02 20:44:25

您可以结合使用正向前瞻和;在正则表达式中查找以确定可以拆分给定字符串的边界(分隔符)。使用:

import re

matches = re.split(r'(?<=\D)(?=\d)|(?<=\d)(?=\D)', string)

给定字符串的结果matches将为

['abc', '0', 'foo!bar'] # 'abc0foo!bar'
['100', '.', '200', '.', '300'] # '100.200.300'
['123'] # '123'
['foo'] # 'foo'

解释:

  1. 正向查找(?<=\D)

    • \D匹配任何非数字字符
  2. 正向前瞻(?=\d)

    • \d匹配一个数字(等于[0-9])
  3. 正向查找(?<=\d)

    • \d匹配一个数字(等于[0-9])
  4. 正向前瞻(?=\D)

    • \D匹配任何非数字字符

您可以测试正则表达式^{}

相关问题 更多 >