Re: [問題] regex問題

看板Python作者 (jlhg)時間12年前 (2013/11/26 20:38), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
試試 re.search('<[^<^>]*>', string) 可以定義為: 括號中間不要有括號的任何文字 re.search會從字串前面開始找,只要有符合條件就會output 和non-greedy沒有關係 ※ 引述《amigcamel (阿吉amig)》之銘言: : 手邊有一個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.28.171

11/26 20:59, , 1F
謝謝,原來我方向搞錯了...
11/26 20:59, 1F
文章代碼(AID): #1Ib9P3oV (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
0
4
完整討論串 (本文為第 2 之 2 篇):
1
1
0
4
文章代碼(AID): #1Ib9P3oV (Python)