[問題] regex問題
手邊有一個regex的問題
不知道是不是跟處理中文有關
pat_en = "<foo<bar/pos>"
pat_ch = u"<夫<爸/pos>"
以上兩個對等的例子,一為中文,一為英文
我的目標是要抓出最裡面的那個括號就好
亦即
<bar/pos>
<爸/pos>
# 英文的部份沒有什麼問題,如下
In [1]: re.search(r"<\w*/\w*>", pat_en).group()
Out[1]: '<bar/pos>'
# 中文...
In [2]: re.search(r"<.*?/\w*>", pat_ch).group()
Out[2]: '<夫<爸/pos>
這邊的?不是應該是non-greedy嗎?
理論上不是應該要得到<爸/pos>嗎?
如果有理解上的錯誤,煩請高人指點!
# 那我在左括號和右括號中間加一個否定式
In [3]: re.search(r"<.[^<]*?/\w*>", pat_ch).group()
Out[3]: '<爸/pos>'
可行
# 同樣的方法也套用在英文上
In [4]: re.search(r"<.[^<]*?/\w*", pat_en).group()
Out[4]: '<bar/pos>'
也可行
不過我發現,這邊的?有加沒加,好像差不多
所以修改如下
r"<.[^<]*?/\w*>" --> r"<.[^<]*/\w*>"
# 套用修改後的的regex在英文上
In [5]: re.search(r"<.[^<]*/\w*>", pat_en).group()
Out[5]: '<bar/pos>'
# 套用修改後的regex在中文上
In [6]: re.search(r"<.[^<]*/\w*>", pat_ch).group()
Out[6]: '<爸/pos>'
由以上發現,這邊?根本沒有作用
這看起來不像是中文編碼問題
即便我在在flag加上re.UNICODE
也沒有任何幫助
如下
In [7]: re.serach(r"<.*?/\w*>", pat_ch, re.UNICODE).group()
Out[7]: '<夫<爸/pos>'
請教大大們
怎樣的regex才能比較精確的表達呢?
還有我哪邊的理解錯誤了,請迷津指點一下
卡關卡好久了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.198
※ 編輯: amigcamel 來自: 140.112.4.198 (11/26 20:09)
※ 編輯: amigcamel 來自: 140.112.4.198 (11/26 20:11)
→
11/26 20:34, , 1F
11/26 20:34, 1F
→
11/26 20:34, , 2F
11/26 20:34, 2F
→
11/26 20:38, , 3F
11/26 20:38, 3F
→
11/26 20:44, , 4F
11/26 20:44, 4F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章