是否有可能使用 Python 在一個(gè)正則表達(dá)式中多次重復(fù)命名捕獲組?下面是正則表達(dá)式(這是不正確的,因?yàn)樵谕粋€(gè)正則表達(dá)式中有重復(fù)的命名組)regex = r'''Use ((?P<phn_num>(?<=(Phone: ))\d{10})?(?P<lndln_num>(?<=(landline: ))\d{10})?) or you can also use((?P<phn_num>(?<=(Phone: ))\d{10})?(?P<lndln_num>(?<=(Landline: ))\d{10})?)'''輸入字符串將是以下之一: 1. Use Phone: 1234567890 or you can also use Landline: 0012345678 2. Use Landline: 0012345678 or you can also use Phone: 1234567890目標(biāo)是使一個(gè)正則表達(dá)式同時(shí)捕獲phn_num和lndln_num作為命名捕獲組,如果上述任何字符串作為輸入給出。
1 回答

不負(fù)相思意
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
該模式未錨定,因此您可以使用交替|
而不是使用兩個(gè)命名的捕獲組來(lái)匹配兩個(gè)變體。
使用不區(qū)分大小寫(xiě)的匹配:
\bUse (?:Phone: (?P<phn_num>\d{10})|landline: (?P<lndln_num>\d{10}))
\bUse
匹配使用前面的單詞邊界并匹配空格(?:
交替的非捕獲組Phone: (?P<phn_num>\d{10})
匹配phone:
和 10 位數(shù)字|
或者landline: (?P<lndln_num>\d{10})
匹配landline:
和 10 位數(shù)字)
添加回答
舉報(bào)
0/150
提交
取消