dom*_*ruf 48 python string split
我想分割这些字符串
'foofo21'
'bar432'
'foobar12345'
Run Code Online (Sandbox Code Playgroud)
成
['foofo', '21']
['bar', '432']
['foobar', '12345']
Run Code Online (Sandbox Code Playgroud)
有人知道在python中执行此操作的简单方法吗?
Eva*_*ark 54
我会通过re.match
以下方式使用它来解决这个问题:
match = re.match(r"([a-z]+)([0-9]+)", 'foofo21', re.I)
if match:
items = match.groups()
# items is ("foo", "21")
Run Code Online (Sandbox Code Playgroud)
小智 30
>>> def mysplit(s): ... head = s.rstrip('0123456789') ... tail = s[len(head):] ... return head, tail ... >>> [mysplit(s) for s in ['foofo21', 'bar432', 'foobar12345']] [('foofo', '21'), ('bar', '432'), ('foobar', '12345')] >>>
Fed*_*oni 21
>>> r = re.compile("([a-zA-Z]+)([0-9]+)")
>>> m = r.match("foobar12345")
>>> m.group(1)
'foobar'
>>> m.group(2)
'12345'
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个具有该格式的字符串列表:
import re
r = re.compile("([a-zA-Z]+)([0-9]+)")
strings = ['foofo21', 'bar432', 'foobar12345']
print [r.match(string).groups() for string in strings]
Run Code Online (Sandbox Code Playgroud)
输出:
[('foofo', '21'), ('bar', '432'), ('foobar', '12345')]
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 20
另一种选择:
>>> [re.split(r'(\d+)', s) for s in ('foofo21', 'bar432', 'foobar12345')]
[['foofo', '21', ''], ['bar', '432', ''], ['foobar', '12345', '']]
Run Code Online (Sandbox Code Playgroud)
我总是那个提起findall()=)的人
>>> strings = ['foofo21', 'bar432', 'foobar12345']
>>> [re.findall(r'(\w+?)(\d+)', s)[0] for s in strings]
[('foofo', '21'), ('bar', '432'), ('foobar', '12345')]
Run Code Online (Sandbox Code Playgroud)
请注意,我使用比以前大多数答案更简单(更少类型)的正则表达式.
小智 6
这是一个从任意长度的字符串中分离多个单词和数字的简单函数,re 方法只分离前两个单词和数字。我认为这将有助于未来的所有人,
def seperate_string_number(string):
previous_character = string[0]
groups = []
newword = string[0]
for x, i in enumerate(string[1:]):
if i.isalpha() and previous_character.isalpha():
newword += i
elif i.isnumeric() and previous_character.isnumeric():
newword += i
else:
groups.append(newword)
newword = i
previous_character = i
if x == len(string) - 2:
groups.append(newword)
newword = ''
return groups
print(seperate_string_number('10in20ft10400bg'))
# outputs : ['10', 'in', '20', 'ft', '10400', 'bg']
Run Code Online (Sandbox Code Playgroud)