iT邦幫忙

0

用正則取得要的部分

  • 分享至 

  • xImage

這是我自己寫的正則

i=""
it = re.search('\[(\(?[^](]*)\]* [^[]',i)
print(it.group(1),"\n")

目前確認可以匹配

[要的部分 (不要的)] 不要的 [不要的] [不要的]
[要的部分] 不要的 [不要的] [不要的]
[要 的 部 分 (不要的)] 不要的 [不要的] [不要的]
[要 的 部 分] 不要的 [不要的] [不要的]

但是偶爾會出現這種無法匹配的
或缺少的
有方法改良嗎?

[要的部分(不要的)] 不要的 [不要的] [不要的]
[要 的 部 分(不要的)] 不要的 [不要的] [不要的]

https://ithelp.ithome.com.tw/upload/images/20211220/20123846wuxOFTfwYe.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
listennn08
iT邦高手 5 級 ‧ 2021-12-21 09:29:21
最佳解答
\[(.+?) ?(?:\(.+?\))?\](?= [^[])

https://ithelp.ithome.com.tw/upload/images/20211221/20117165JhOEVaY7rz.png

s4028600 iT邦新手 5 級 ‧ 2021-12-21 23:11:15 檢舉

測試是可以用
但只看懂部分寫法
讓我研究一下

.+?好像是指
.匹配除换行符 \n 之外的任何单字符
+匹配.一次或多次
?指明一个非贪婪限定符

?:和?=這個搞不懂...
否定的意思?

?: 是取得匹配但不納入群組
?= 是不取得匹配

舉個簡單例子

string: abc
pattern: a(?:b)

這個會取得 ab

string: abc
pattern: a(?=b)

這個只會取得 a

4
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-21 08:47:17

範例資料的 pattern 可能要再完整一點
否則就用這樣就可以了

https://ithelp.ithome.com.tw/upload/images/20211221/20001787X5gbSJ06sS.png

看更多先前的回應...收起先前的回應...
s4028600 iT邦新手 5 級 ‧ 2021-12-21 12:26:53 檢舉

......
要的部分只是範例
真正要抓取的東西怎麼可能是長這樣……

/images/emoticon/emoticon38.gif

Homura iT邦高手 1 級 ‧ 2021-12-21 16:59:21 檢舉

/images/emoticon/emoticon38.gif

s4028600 iT邦新手 5 級 ‧ 2021-12-21 23:11:52 檢舉

還是你們想看我是拿來抓什麼?

我要發表回答

立即登入回答