python:根据任何非数字字符的首次出现来拆分字符串

时间:2019-07-13 18:40:47

标签: python regex string

我具有以下形式的字符串:

s = '567a45b'

一般格式是一组数字后跟一个字母,然后是一组数字后跟一个字母。这2个数字序列中的每个序列的长度都可以变化,字母可以是A-Z。

我正在寻找一种将其分解为以下内容的一般方法:

['567a','45b']

因此基本上是根据第一个非数字字符的位置进行拆分

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

此表达式也可能简单起作用:

import re

print(re.findall(r"(\d+[A-Za-z])", "567a45b567a45b567a45b"))

输出

['567a', '45b', '567a', '45b', '567a', '45b']

答案 1 :(得分:1)

怎么样?

temp = []
result = []
for c in list(s):
    if not c.isnumeric():
        temp.append(c)
        result.append("".join(temp))
        temp = []
    else:
        temp.append(c)

print(result)

输出:

['567a', '45b']

答案 2 :(得分:1)

这就是您需要的

  

基于任何一组字母(非数字)字符的首次出现

在这里,这将为您在中间的字符串中提供干净的split()
请注意,由于
,您不应该只分割 first alpha字符 可能会有一系列的字母字符,每个字母都会被拆分
成一个元素。

(?i)(?<=[a-z])(?![a-z]|$)

https://regex101.com/r/8BYChO/1

扩展版本

 (?i)
 (?<= [a-z] )
 (?! [a-z] | $ )

还有一个小伙子;如果您依靠数字出现,则会炸裂该分组
在Alpha字符之前。

答案 3 :(得分:1)

使用正则表达式,然后将其拆分为您的模式,但要匹配该模式。丢弃拆分模式之间的所有空段。

$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re

>>> re.split(r"(\d+\D+)", "567a45b")
['', '567a', '', '45b', '']

>>> re.split(r"(\d+\D+)", "567a45b")[1::2]
['567a', '45b']

反斜线表示一个或多个数字,然后是一个或多个非数字。