使用python正则表达式捕捉类似的字符串

2024-07-04 07:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种形式:

Beta_Gambus_teta_some_changeable_string_2017.02.1276 and 
Beta_Gambus_teta__some_changeable_string_update_2017.02.1276

示例:

 Beta_Gambus_teta_wqtr_2017.02.1276.ctr
 Beta_Gambus_teta_wqtr_update_2017.02.1277.ctr
 Beta_Gambus_teta_tpsedr_2017.02.1276.ctr
 Beta_Gambus_teta_tpesdr_update_2017.02.1277.ctr
 Beta_Gambus_teta_cnmsr_2018.02.1279.ctr 
 Beta_Gambus_teta_cnms_update_2018.02.1279.ctr

我需要用regex来捕捉那些有'update'的和没有'update'的分开。你知道吗

我正在使用^.+_(.+)\.ctr$,但它太宽泛了。你知道吗


Tags: and示例stringupdatesome形式betactr
3条回答

要将字符串与_update_匹配,请使用:

^Beta_Gambus_teta_.*_update_\d{4}\.\d{2}\.\d{4}\.ctr$

要匹配不带_update_的字符串:

^Beta_Gambus_teta_(?!.*_update_).*_\d{4}\.\d{2}\.\d{4}\.ctr$

这里的(?!.*_update_)是一个否定的先行断言,如果在启动Beta_Gambus_teta_部分之后发现_update_,则该断言将失败匹配。你知道吗

除非你不告诉我们什么,这里根本不需要正则表达式。。。你知道吗

strings = ["Beta_Gambus_teta_wqtr_2017.02.1276.ctr",
           "Beta_Gambus_teta_wqtr_update_2017.02.1277.ctr",
           "Beta_Gambus_teta_tpsedr_2017.02.1276.ctr",
           "Beta_Gambus_teta_tpesdr_update_2017.02.1277.ctr",
           "Beta_Gambus_teta_cnmsr_2018.02.1279.ctr",
           "Beta_Gambus_teta_cnms_update_2018.02.1279.ctr"]

with_update = []
no_update = []
for s in strings:
    if "update" in s:
        with_update.append(s)
    else:
        no_update.append(s)

即使摆脱if

res = ([], [])

for s in strings:
    res["update" in s].append(s)

no_update, with_update = res

两者都提供:

>>> print(with_update)
['Beta_Gambus_teta_wqtr_update_2017.02.1277.ctr', 'Beta_Gambus_teta_tpesdr_update_2017.02.1277.ctr', 'Beta_Gambus_teta_cnms_update_2018.02.1279.ctr']
>>> print(no_update)
['Beta_Gambus_teta_wqtr_2017.02.1276.ctr', 'Beta_Gambus_teta_tpsedr_2017.02.1276.ctr', 'Beta_Gambus_teta_cnmsr_2018.02.1279.ctr']

您可以尝试使用以下模式进行更新匹配:

Beta_Gambus_teta_[^_]+_update_\d{4}\.\d{2}\.\d{4}\.ctr

并将此模式用于非更新匹配:

Beta_Gambus_teta_[^_]+_\d{4}\.\d{2}\.\d{4}\.ctr

示例脚本:

path = "Beta_Gambus_teta_wqtr_update_2017.02.1277.ctr"
if re.search(r'Beta_Gambus_teta_[^_]+_update_\d{4}\.\d{2}\.\d{4}\.ctr', path):
    print("MATCH")

相关问题 更多 >

    热门问题