[英]Why is my regex returning None?
我的正則表達式僅在不包含“或”選項時才匹配; 但是我需要包括它,因為我需要匹配不同的字符串。
entries[0] = 'ephname = /share/old/eph/2004A.1770.comb'
print re.search(r'\s?ephname\s?=\s?.*?\.s(\d+).*?\s?|\s?ephname\s?=\s?.*?(\d+)
\.comb\s?', entries[0]).group(1)
>>> None
但是,如果我這樣做,它將起作用:
print re.search(r'\s?ephname\s?=\s?.*?(\d+)\.comb\s?', entries[0]).group(1)
>>> 1770
我不知道為什么第一次嘗試不匹配任何東西。 有人知道為什么嗎?
在第一個正則表達式中,組1在|
之前|
,所以它在包含\\.s
的分支中。 字符串的任何部分都不能與之匹配(您沒有文字.
后跟文字s
),因此整個分支都會失敗。 另一個分支成功,但是它具有不同的組號,以讓您知道哪個替代方法有效。
它是匹配的; 它返回一個匹配對象,而不是None
; 然后在該匹配對象上調用.group(1)
。
但是,這里存在兩個捕獲組的問題。 第一個在第一個分支中,第二個在第二個分支中。
您可以將匹配項存儲到變量中,然后使用lastindex
屬性獲取最后匹配的捕獲組的索引:
m = re.search(r'\s?ephname\s?=\s?.*?\.s(\d+).*?\s?'
r'|\s?ephname\s?=\s?.*?(\d+)\.comb\s?', entries[0])
if m:
print(m.group(m.lastindex))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.