我想用Python中的正則表達式替換給定的模式,使用re
。這是我寫的Python代碼:Python正則表達式:替換忽略空字符串
import re
fname = './prec.f90'
f = open(fname)
lines = f.readlines()
f.close()
for i, line in enumerate(lines):
search = re.findall('([\d*]?\.[\d*]?)+?[^dq\_]', line)
if search != []:
print('Real found in line #%d: ' %i)
print search
print('The following line:\n %s' %line)
print('will be replace by:')
newline = re.sub('([\d*]?\.[\d*]?)+?[^dq\_]', r'\g<1>d0\g<2>', line)
print('%s' %newline)
而且prec.f90
包含類似的東西(這只是一個例子,它並不意味着所有我想要替換字符串格式爲[x]_[yz] = ...;
):
x_pr = 0.1; y_pr = 0.2; z_pr = 0.1q0
x_sp = 0.1; y_sp = 0.1d0; z_sp = 0.1q0
x_dp = 0.1; y_dp = 0.1d0; z_dp = 0.1q0
x_qp = .1; y_qp = 0.1d0; z_qp = 0.1q0
x_db = 0.; y_db = 0.1d0; y_db = 0.1q0
我的目標是要修改所有的格式,如:0.1
,.1
和0.
,要達到這樣的0.1d0
;我不想修改其他模式。問題是re.findall('[\d*]?\.[\d*]?)+?([^dq\_]')
與我正在查找的模式匹配,但也爲其他的返回空字符串。因此,當我運行這段代碼時,它失敗了,無法替換空字符串re.sub()
中的第一組和第二組。
我想一種解決方案是忽略re.sub
中的空字符串,或者在其中有類似條件的參數,但我無法弄清楚。
任何幫助,將不勝感激!
由於您使用'*'選擇了所有組件,因此它[失去空字符串]是失敗的。你想要替換的行的最小字符串是多少?如果它是'.x',則將第二個'\ d *'改爲'\ d +' – beroe 2014-11-21 18:58:12
問題是它們可以具有我提到的3種形式:'x.y','.y'和'x.'。我想(需要)涵蓋所有這些情況。 – MBR 2014-11-23 10:47:42