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