按照两个条件分割字符串 - 通配符

3

我需要按照字符加通配符的形式来拆分一个字符串:

text1 = "CompanyA-XYZ-257999_31.12.2000"
text2 = "CompanyB-XYZ-057999_31.12.2000"

我希望在位置[-2]或[-0](就在XYZ后面)拆分该字符串。由于有两个“ - ”,我无法简单地按该字符拆分。实际上,我想以[-AnyNumber]的形式进行拆分,其中AnyNumber应该是一个整数通配符。
5个回答

4
你尝试过使用 re 吗?
import re
>>>re.findall("(.+XYZ)-(.+)",text1)
[('CompanyA-XYZ', '257999_31.12.2000')]

或者

>>>re.findall("(.+)-(.+)",text1)
[('CompanyA-XYZ', '257999_31.12.2000')]

这是个好主意,你能告诉我如何实现吗?如果文本是text3 =“CompanyC-3552_31.12.2000”?你代码中的“( . +)”是通配符吗? - Dominik Scheld
只需使用以下代码即可:re.findall("(.+)-(.+)",text3) - itzMEonTV

1
你不需要正则表达式,可以使用 str.rsplit 向右分割字符串,将 maxsplit 设置为 1:
text1 = "CompanyA-XYZ-257999_31.12.2000"

print(text1.rsplit("-",1))
['CompanyA-XYZ', '257999_31.12.2000']

text2 = "CompanyB-XYZ-057999_31.12.2000"
print(text2.rsplit("-",1))
['CompanyB-XYZ', '057999_31.12.2000']

如果你想将它们存储在变量中,只需解包即可:
comp, dte = text2.rsplit("-",1)
print(comp,dte)
('CompanyB-XYZ', '057999_31.12.2000')

0
>>> text1 = "CompanyA-XYZ-257999_31.12.2000"

>>> text1[:-18]
'CompanyA-XYZ'

>>> text1[-17:]
'257999_31.12.2000'

0

[-任意数字] 进行分割

In [5]: import re

In [6]: re.split('-(?:[0-9])', text1)
Out[6]: ['CompanyA-XYZ', '57999_31.12.2000']

In [7]: re.split('-(?:[0-9])', text2)
Out[7]: ['CompanyB-XYZ', '57999_31.12.2000']

0

使用正则表达式和前瞻断言:

>>> import re
>>> text1 = "CompanyA-XYZ-257999_31.12.2000"
>>> text2 = "CompanyB-XYZ-057999_31.12.2000"
>>> re.split('-(?=\d)', text1)
['CompanyA-XYZ', '257999_31.12.2000']
>>> re.split('-(?=\d)', text2)
['CompanyB-XYZ', '057999_31.12.2000']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接