簡體   English   中英

使用python regex捕獲相似的字符串

[英]Use python regex to catch similar strings

我有2個字符串形式:

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

我需要用正則表達式捕獲其中包含“更新”的代碼與不包含“更新”的代碼。

我正在使用^.+_(.+)\\.ctr$但范圍很廣。

除非您不告訴我們任何信息,否則這里根本不需要正則表達式...

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")

要將字符串與_update_匹配, _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_則匹配失敗。

您是否嘗試過以下方法?

.+update.+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM