想要的操作如題目所示,我的資料格式如下:
我的目的是想將「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...