Re: [問題] regex問題
試試
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
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章