![](/img/trans.png)
[英]Catch alternative strings from OR operator with a Regex in Python?
[英]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.