3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
-
對(duì)于第一個(gè)模式,如果右側(cè)是空格,則可以使用交替來匹配,并[
使用正向前視。
(?<=-\s)[a-zA-Z0-9]+|-(?=?\[)
對(duì)于第二種模式,您可以使匹配更加具體,并根據(jù)需要進(jìn)行擴(kuò)展。
(?:POST|DELETE)?\S+?HTTP/(?:1\.[01]|2.0)
或者使用 re.findall 返回的捕獲組進(jìn)行更廣泛的匹配,并匹配大寫字符,后跟/
左雙引號(hào)后的字符 a-zA-Z。
不確定最后一個(gè)"
是否丟失,但在這種情況下,您可以匹配它或斷言字符串的結(jié)尾。
"([A-Z]+\s/[a-zA-Z][^"]+)(?:"|$)

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,您需要稍微調(diào)整。你需要但是\s
與lookbehind
user_name = re.findall('(?<=[-]\s)[a-zA-Z0-9]*', text) print(user_name)
但這會(huì)產(chǎn)生:
['feest6811', 'kertzmann3129', '']
您無法將“-”作為返回列表的第三個(gè)值,因?yàn)楹笠晱膩聿皇瞧ヅ涞囊徊糠?。您想要在最終匹配中輸入的第三個(gè)-
輸入字符串findall
位于以下上下文中:
156.127.178.177 - [21/Jun/2019:15:45:27 -0700]
在本例中返回 '' 的正則表達(dá)式同樣可以很好地指示輸入字符串中是否存在 '-' 以及相應(yīng)的空子[a-zA-Z0-9]*
表達(dá)式匹配項(xiàng)。如果這確實(shí)困擾您,您可以隨時(shí)這樣做:
user_name = re.findall('(?<=[-]\s)[a-zA-Z0-9]*', text) user_name = ['-' if x == '' else x for x in user_name] # convert '' to '-' print(user_name)
印刷:
['feest6811', 'kertzmann3129', '-']
對(duì)于第二個(gè)使用:
request = re.findall(r'[a-zA-Z]*\s/[a-zA-Z].*?/\d\.\d', text)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
我喜歡使用 Regex101.com 來構(gòu)建這樣的正則表達(dá)式。
請(qǐng)嘗試以下操作
1.這是更正后的版本:https ://regex101.com/r/bFDnSm/2
請(qǐng)注意正則表達(dá)式更改為
(?<=[-]\s)[a-zA-Z0-9]*
這是更正后的版本: https ://regex101.com/r/4uLVUb/1
請(qǐng)注意正則表達(dá)式更改為:
[a-zA-Z]*\s/[a-zA-Z+/]+\s[AZ]+/[0-9.]+
您應(yīng)該發(fā)現(xiàn)它非常廣泛,甚至可以使用更多示例。
添加回答
舉報(bào)