簡體   English   中英

為什么我的正則表達式不返回None?

[英]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.

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