從一串字串中提取數字,可以使用下面的方法,但是返回的是陣列,而且列印出來也是帶[ ]的,如果想返回數字本身,加上.group()
下表中其中?是1或者0,*是0或者多個,這就是區別
使用正規表示式,用法如下:
## 總結
## ^ 匹配字串的開始。
## $ 匹配字串的結尾。
## \b 匹配乙個單詞的邊界。
## \d 匹配任意數字。
## \d 匹配任意非數字字元。
## x? 匹配乙個可選的 x 字元 (換言之,它匹配 1 次或者 0 次 x 字元)。
## x* 匹配0次或者多次 x 字元。
## x+ 匹配1次或者多次 x 字元。
## x 匹配 x 字元,至少 n 次,至多 m 次。
## (a|b|c) 要麼匹配 a,要麼匹配 b,要麼匹配 c。
## (x) 一般情況下表示乙個記憶組 (remembered group)。你可以利用 re.search 函式返回物件的 groups() 函式獲取它的值。
## 正規表示式中的點號通常意味著 「匹配任意單字元」
解題思路:
2.1 既然是提取數字,那麼數字的形式一般是:整數,小數,整數加小數;
2.2 所以一般是形如:----.-----;
2.3 根據上述正規表示式的含義,可寫出如下的表示式:"\d+\.?\d*";
2.4 \d+匹配1次或者多次數字,注意這裡不要寫成*,因為即便是小數,小數點之前也得有乙個數字;\.?這個是匹配小數點的,可能有,也可能沒有;\d*這個是匹配小數點之後的數字的,所以是0個或者多個;
**如下:
# -*- coding: cp936 -*-
import
re
string
=
"a1.45,b5,6.45,8.82"
print
re.findall(r
"\d+\.?\d*"
,string)
# ['1.45', '5', '6.45', '8.82']
我想替換配置檔案中的乙個配置項的配置值,但是一直都不正確,網上搜到這個結果:
假如文字內容如下:
11.0
2cfbundlesignature
3????
4cfbundleversion
510000
如何用sed替換在某一行與中間的值, 比如第一行中間的值是1.0,我想替換為999,怎麼去實現呢? 同樣第3行、第5行、第n行可以有選擇性地進行替換。
感謝樓下兩位, 有選擇性地去替換見下表示式,n代表行數。
sed -r 'n s/()[^<]*(<\/string>)/\1999\2/'
其中()為\1
(<\/string>)為\2
指前面中括號的內容,數字遞增。
圓括號()是組,主要應用在限制多選結構的範圍/分組/捕獲文字/環視/特殊模式處理
示例:1、(abc|bcd|cde),表示這一段是abc、bcd、cde三者之一均可,順序也必須一致
2、(abc)?,表示這一組要麼一起出現,要麼不出現,出現則按此組內的順序出現
3、(?:abc)表示找到這樣abc這樣一組,但不記錄,不儲存到$變數中,否則可以通過$x取第幾個括號所匹配到的項,比如:(aaa)(bbb)(ccc)(?:ddd)(eee),可以用$1獲取(aaa)匹配到的內容,而$3則獲取到了(ccc)匹配到的內容,而$4則獲取的是由(eee)匹配到的內容,因為前一對括號沒有儲存變數
4、a(?=bbb) 順序環視 表示a後面必須緊跟3個連續的b
5、(?i:***x) 不區分大小寫 (?s:.*) 跨行匹配.可以匹配回車符
方括號是單個匹配,字符集/排除字符集/命名字符集
示例:1、[0-3],表示找到這乙個位置上的字元只能是0到3這四個數字,與(abc|bcd|cde)的作用比較類似,但圓括號可以匹配多個連續的字元,而一對方括號只能匹配單個字元
2、[^0-3],表示找到這乙個位置上的字元只能是除了0到3之外的所有字元
()和有本質的區別
()內的內容表示的是乙個子表示式,()本身不匹配任何東西,也不限制匹配任何東西,只是把括號內的內容作為同乙個表示式來處理,例如(ab),就表示ab一起連續出現最少1次,最多3次。如果沒有括號的話,ab,就表示a,後面緊跟的b出現最少1次,最多3次。另外,括號在匹配模式中也很重要。這個就不延伸了,lz有興趣可以自己查查
表示匹配的字元在中,並且只能出現一次,並且特殊字元寫在會被當成普通字元來匹配。例如[(a)],會匹配(、a、)、這三個字元。
所以() 無論是作用還是表示的含義,都有天壤之別
正規表示式 正規表示式 總結
非負整數 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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...