python中如何使用正則匹配以及調換文件位置

2021-10-09 03:34:53 字數 2566 閱讀 5539

想要的操作如題目所示,我的資料格式如下:

我的目的是想將「s生育情況 g 2 p 0 e生育情況」從末尾位置放置到開頭位置,也就是變為下面這種情況:

下面上具體的**:

這裡我特意使用了幾種pattern去匹配我想要的字串,我想要匹配的是「|| s生育情況 g 2 p 0 e生育情況」,所以使用了反斜槓「\」來轉譯豎槓「|」;由於我想匹配的字串中間的字元是使用空格連線的,所以我使用了「(\s)」或者「[\s]」來匹配空格,注意不能直接使用「(』 『)」或者「[』 ']」;由於我要匹配的字串中的g和p有可能遇到小寫的情況,所以使用了[gg]和[pp],表示中間的字元是或的關係;使用了「\d」來表示任意一位數字,當然你也可以使用「\d*」或者「\d+」來匹配多個數字;另外就是以「e生育情況」結尾,我這裡直接用的是

pattern_1 =

'\|\|[\s]s生育情況(\s)[gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況$'

由於我這裡的字串是以一行一行儲存的,所以其實「e生育情況」後年會跟乙個換行符,所以使用

attern_1 =

'\|\|(\s)s生育情況(\s)[gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況\n$'

會更嚴謹一些。

import json

import re

#pattern_1 = '||(\s)s生育情況(\s)[gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況\n$'

#pattern_1 = '\|\|(\s)s生育情況(\s)[gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況\n$'

pattern_1 =

'\|\|[\s]s生育情況(\s)[gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況$'

#pattern_1 = '\|\|(\s)s生育情況[' '][gg](\s)\d(\s)[pp](\s)\d(\s)e生育情況\n$'

pattern_2 =

"\|\|[\s]s生育情況[\s]孕[\s][1-9][\s]產[\s][1-9][\s]e生育情況$"

defmain()

:with

open

('../data8/grs_train.res'

,'r'

,encoding=

'utf-8'

)as file1, \

open

('../data8/grs_train.res'

,'w+'

, encoding =

'utf-8'

)as file2:

lines = file1.readlines(

)for line in lines:

str1 = re.search(pattern_1,line)

str2 = re.search(pattern_2,line)

# row = ''

if str1:

row1 =

list

(str1.group())

[3:]

row1 =

''.join(row1)

# row = str1[3:]

line = line.replace(str1.group(),

'')row1 +=

' '+

'||'

+' '

+ line

file2.write(

str(row1)

.strip()+

'\n'

)elif str2:

#row2 = list(str2.group())[3:]

row2 = str2.group()[

3:]#row2 = ''.join(row2)

# row = str1[3:]

line = line.replace(str2.group(),

'')row2 +=

' '+

'||'

+' '

+ line

file2.write(

str(row2)

.strip()+

'\n'

)else

: file2.write(line.strip()+

'\n'

)if __name__ ==

'__main__'

: main(

)

另外就是當使用re.search()這個函式時,必須結合group()才可以獲得字串返回值,**中有兩種做法,一種是使用list將str1.group()得到的字串轉化為列表,然後使用列表的額切片,想要得到字串再使用』』.join()。不過上述做法略顯繁瑣,可以直接使用str2.group()直接返回匹配到的字串,然後在此基礎上操作。不過多一種方式就多一種思路,說不定以後就會用到需要轉換成列表進行操作的情況。

另外需要說明的是**中的「…/」是表示在上述程式的父目錄,如果是當前目錄應該使用「./」,當然你也可以使用絕對路徑。

Python使用正則匹配處理文字

文字內容處理 import re pattern re.compile xmin n.xmax n.text pattern1 re.compile xmax pattern2 re.compile xmin with open 041.textgrid as lines 一次性讀入txt檔案,並把...

正則匹配 Python

1.1 0 1 個字元1.2 放在末尾,兩個對等字元之間 對等字元 所有稱得上是括號的字元 左右對稱 所有非括號字元 自對稱 最小對等字元匹配 比如 匹配下文 最小結果只有順帶地,當有多個匹配結果時,m re.search m.group n 返回第n組括號匹配的字元。只需要一組結果時,用m.gro...

Python正則匹配

使用re模組 首先生成乙個匹配模式pattern,如pattern test 然後使用re.match pattern,str 或者search 匹配呼叫 match跟search的區別 match 函式試圖從字串的起始部分對模式進行匹配。如果匹配成功救返回乙個匹配物件 如果匹配失敗,就返回none...