正規表示式

2021-05-14 17:27:20 字數 2150 閱讀 5059

emacs正則替換命令

m-x replace-regexp ret ?ret ? ret

最短匹配

有一次想用正規表示式從網頁裡面抓取一些東西出來,內容不複雜卻出現不少問題。

如果內容是這樣,想提取藍色的部分:

a='ff33kie8' /> abcde

a='743u4343525fj' />

在 vim 裡面只要用 a='.*' 這樣的正則式就可以選出來了。

但是我的要抓取的內容是下面這樣,再用上面那個正則式就不行了。

a='ff33kie8'/> abcde abcdef abcdefg />

如果用正則式  a='.*'   的話,選取的部分就是如同上面藍色的部分。這時候就得用「最短匹配」的方式才行。

a='ff33kie8' /> abcde a='sse3' /> abcdef a='hhs77565' /> abcdefg a='743u4343525fj' />

正則式為  a='./' 才能符合我的要求,產生如上的結果。/ 這個符號就表示採用最短匹配的方式了。詳情請看 vim 正規表示式的幫助。

正規表示式中的字元:

^          匹配行首

$ 匹配行尾

. 匹配任意單個字元

.* 匹配任意個字元

/< 匹配單詞的開頭

/> 匹配單詞的結尾

匹配中的任何乙個字元,如[a-z]匹配任何乙個小寫字母

一些regular的tips:

1非貪婪flag

>>> re.

findall(r

"a(/d+?)",

"a23b")

['2'

]>>> re.

findall(r

"a(/d+)",

"a23b")

['23'

] 注意比較這種情況:

>>> re.

findall(r

"a(/d+)b",

"a23b")

['23'

]>>> re.

findall(r

"a(/d+?)b",

"a23b")

['23'

] 2如果你要多行匹配,那麼加上re.s和re.m標誌

re.s:.將會匹配換行符,預設.不會匹配換行符

>>> re.

findall(r

"a(/d+)b.+a(

/d+)b",

"a23b

/na34b")

>>> re.

findall(r

"a(/d+)b.+a(

/d+)b",

"a23b

/na34b",

re.s)

[('23'

, '34'

)]>>>

re.m:^$標誌將會匹配每一行,預設^和$只會匹配第一行

>>> re.

findall(r

"^a(

/d+)b",

"a23b

/na34b")

['23'

]>>> re.

findall(r

"^a(

/d+)b",

"a23b

/na34b",

re.m)

['23'

, '34'

] 但是,如果沒有^標誌,

>>> re.

findall(r

"a(/d+)b",

"a23b

/na23b")

['23'

, '23'

] 可見,是無需re.m

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...