我具有以下形式的字符串:
s = '567a45b'
一般格式是一组数字后跟一个字母,然后是一组数字后跟一个字母。这2个数字序列中的每个序列的长度都可以变化,字母可以是A-Z。
我正在寻找一种将其分解为以下内容的一般方法:
['567a','45b']
因此基本上是根据第一个非数字字符的位置进行拆分
感谢您的帮助!
答案 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']
反斜线表示一个或多个数字,然后是一个或多个非数字。