正規表示式

2021-07-31 06:34:22 字數 2595 閱讀 9943

從一串字串中提取數字,可以使用下面的方法,但是返回的是陣列,而且列印出來也是帶[ ]的,如果想返回數字本身,加上.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 -*-

importre

string="a1.45,b5,6.45,8.82"

printre.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正規表示式 編寫正規表示式

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