s_l = ["春天年初, ...","1999年", "很多年以前"]
for front_part in s_l:
idx_year = re.search(r'[\d]*[年]{1}[初末底前]{0,1}',front_part).end() \
if re.search(r'[\d]*[年]{1}[初末底前]{0,1}',front_part) else 0
print(idx_year)
我要搜索有 的子串的idx,年同時“年”前或后必須有數字(符號A)年 或 [初末底前](符號B),例如,在s_l中,它應該回傳4,5,0
劃分正則運算式的一種想法,例如
re.search(r'[\d] [年]{1}',front_part) or re.search(r'[年]{1}[初末底前]{0,1}',front_part)
但它太復雜了,另一個正在使用(?=...),但我不知道如何使用它,有什么建議嗎?
uj5u.com熱心網友回復:
您可以使用后向斷言來匹配年前面有數字的出現。使用交替模式來匹配后面跟著的模式[初末底前]:
pattern = re.compile(r'(?<=\d)年|年[初末底前]')
print([match.end() if match else 0 for match in map(pattern.search, s_l)])
這輸出:
[4, 5, 0]
uj5u.com熱心網友回復:
試試這個,
lst = ["春天年初, ...","1999年", "很多年以前"]
pattern = re.compile("(.*\d|初末底前)年.*")
for i, s in enumerate(lst):
patterns = list(pattern.finditer(s))
if patterns != []:
print(list(map(lambda item:(i, item.span()), patterns)))
輸出將類似于[(1, (0, 5))]. 這里串列中每個元素的第一部分將是串列lst中與條件匹配的字串的索引。第二部分是串列項中這些條件出現的索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475195.html
