正規表示式和動態替換

2022-04-25 09:45:54 字數 1420 閱讀 4841

正規表示式修飾符:

\w:數字,字母,下劃線

\d:阿拉伯數字

\s:空白字元:換行,空格,製表符

: 一組字元

():分組字元

(|) :任一字元;管道字元|

()?:可選匹配

{}?:非貪心匹配

重複修飾符: (*, +, ?, ..)

{}:字元個數或範圍

* :>=0次

+ :>=1次

. :萬用字元

.*:除換行的所有字元

正規表示式的動態替換:

python 中 re.sub方法不僅可以傳入正規表示式,也可以傳入函式,其中函式輸入引數為 sre_matcher 案例如下:

另外,正規表示式選擇分組的方法 $1 在 python 中寫作 \g<1>,為了避免歧義,匹配小數點時建議使用 2 個反斜線 \\

import

rep = '

s1.b2.bn.weight

'p = '

s1.b2.proj.weight

'p = '

s1.b1.f.a_bn.num_batches_tracked'#

p = 's1.b1.f.b.k4.1.running_var'

d = '

res2.1.shortcut.norm.weight'#

pattern = "^s(\d+)\\.b(\d+)\\.bn\\.(\w+)$"

#pattern = "^s(\d+)\\.b(\d+)\\.(bn|proj)\\.(\w+)$"

#pattern = "^s(\d+)\\.b(\d+)\\.(bn|proj|f\\.\w+|f\\.\w+\\..*)\\.(\w+)$"

pattern = "

^s(\d+)\\.b(\d+)\\.(bn|proj|f\\..*)\\.(\w+)$

"new = "

res\g<1>.\g<2>.shortcut.norm.\g<3>

"def

f(matcher):

gs = matcher.groups() #

可以得到每個組的元素 tuple

string = matcher.expand(new) #

和 re.sub 等價的方法

print('

gs:'

,gs)

return

matcher.expand(new)

ret =re.sub(pattern, f, p)

print('

returned:

', ret)

#輸出為

#gs: ('1', '1', 'f.a_bn', 'num_batches_tracked')

#returned: res1.1.shortcut.norm.f.a_bn

正規表示式替換

正規表示式替換 每行的資料格式為 vcbi zuuu 001a465 kakid legos 要求變為格式為 vcbizuuu001 a465 kakid legos 替換掉第一部分和第二部分中間的空格,第二部分和第三部分中間的空格,其他的保持乙個空格 string originalstring v...

正規表示式 替換

正規表示式 替換 正規表示式 符合一定規則的而表示式.作用 用於專門操作字串。特點 用於一些特定的符號來表示一些 操作。這樣就簡化書寫。所以學習正規表示式 好處 可以簡化對字串的複雜操作。弊端 符號定義越多,正則越長,閱讀性越差 具體操作功能 1,匹配 string matches 方法.用規則整個...

正規表示式 替換

好了,現在終於到了解決3位或4位區號問題的時間了。正規表示式裡的替換指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用 把不同的規則分隔開。聽不明白?沒關係,看例子 0 d d 0 d d 這個表示式能匹配兩種以連字型大小分隔的 號碼 一種是三位區號,8位本地號 如010 123...