在Python中同时出现连字符和数字时,我试图拆分字符串。
示例-
'ABC7-8-1234: Veggie - RESTRICTED (1)' -> ['ABC7','234: Veggie - RESTRICTED (1)']
'AB-WALT-9-2065: Application (6)` -> ['AB-WALT', '065: Application (6)']
作为第1步-我尝试了re.split()以“-”分隔。但它不起作用。
name = re.split(r"\B-", string)
我得到['ABC7-8-1234: Veggie ', ' RESTRICTED (1)']
而不是['ABC7','8','1234: Veggie ', ' RESTRICTED (1)']
的输出。
第2步将检查连字符和数字的出现。就像-[0-9]
我该如何解决这个问题?
答案 0 :(得分:1)
您可以先用:
拆分字符串,并获取零索引,然后使用正则表达式-\d+-
拆分该字符串,然后应该在问题中得到所需的值。查看此Python代码,
import re
arr = ['ABC7-8-1234: Veggie - RESTRICTED (1)', 'AB-WALT-9-2065: Application (6)']
for s in arr:
print(re.split(r'-\d+-', re.split(':', s)[0]))
打印
['ABC7', '1234']
['AB-WALT', '2065']
作为一种替代方法,您还可以使用此正则表达式并从group1和group2捕获值,
^(.+?)-\d+-([^:]+)
Python代码,
import re
arr = ['ABC7-8-1234: Veggie - RESTRICTED (1)', 'AB-WALT-9-2065: Application (6)']
for s in arr:
m = re.search(r'^(.+?)-\d+-([^:]+)', s)
if m:
print([m.group(1), m.group(2)])
打印
['ABC7', '1234']
['AB-WALT', '2065']
答案 1 :(得分:0)
完整的答案:
st='ABC7-8-1234: Veggie - RESTRICTED (1)'
st=re.search('(.*):.*', st).group(1)
re.split('-\d-', st)
Out[26]: ['ABC7', '1234']
答案 2 :(得分:0)
使用正则表达式和非捕获组(?:):
s1='ABC7-8-1234: Veggie - RESTRICTED (1)'
re.split(r"(?:-\d)+",s1)
Out: ['ABC7', '234: Veggie - RESTRICTED (1)']
保留分隔符模式中的数字:
re.split(r"-(\d)",s1)
Out: ['ABC7', '8', '', '1', '234: Veggie - RESTRICTED (1)']
如果有连续的模式,则会得到空字符串。
使用积极的前瞻:
re.split(r"-(?=\d)",s1)
Out: ['ABC7', '8', '1234: Veggie - RESTRICTED (1)']