我有一个属性文件,我需要从中提取一些特定的属性行:
我的属性文件内容是:
datahelper.SecLegalAgreementParty.queryAttributes = type=DataProcessorHelper, contextType=REFERENCE, dataSource=CIT, dataSubType=SecLegalAgreementParty
datahelper.SecLegalAgreementParty.indexes = agreementIdPartitionIdClientId
datahelper.SecLegalAgreementParty.index.agreementIdPartitionIdClientId.columns=agreementID, partitionID, clientID
datahelper.CITPricerOverrideByTrade.queryAttributes = type=DataProcessorHelper, contextType=REFERENCE, dataSource=CIT, dataSubType=PricerOverrideByTrade
datahelper.CITPricerOverrideByTrade.preload = true
datahelper.CITCrisiDerivativePosition.queryAttributes = type=DataProcessorHelper, contextType=CALC, dataSource=CIT, dataSubType=Exposure, dataProcessorHelperType=result, CanonicalClassName=com.jpmorgan.gcrm.calc.crisi.deriv.common.data.result.CECrisiDerivativePosition
datahelper.CITCrisiDerivativePositionCalcMetricResult.queryAttributes = type=DataProcessorHelper, dataSource=CIT, dataSubType=Exposure, dataProcessorHelperType=result, CanonicalClassName=com.jpmorgan.gcrm.calc.crisi.deriv.common.data.result.CECrisiDerivPsnCalcMetric
我只需要使用datahelper.{anything}.queryAttributes
提取所有属性
我们可以在同一个表达式中省略CanonicalClassName=
的属性。
我的代码就像:
for line in file:
if re.match("^[datahelper.CIT]", line, False):
print line
请协助。
谢谢
答案 0 :(得分:2)
^[datahelper.CIT]
匹配该字符组中的一个字母。那不是你想要的。
这样的事情会起作用:
for line in file:
if re.match(r'datahelper\.(.*?)\.queryAttributes', line):
print line
或以编译形式:
matcher = re.compile(r'datahelper\.(.*?)\.queryAttributes')
for line in file:
if matcher.match(line):
print line
答案 1 :(得分:2)
for line in file:
if re.match("datahelper\.\w+\.queryAttributes", line):
print line
此正则表达式匹配以datahelper.
开头的行,后跟一个或多个字母数字字符,后跟.queryAttributes
(以及之后的任意数量的字符)。
为了进一步避免在同一行中包含CanonicalClassName=
的那些,您可以添加一个先行断言:
for line in file:
if re.match("datahelper\.\w+\.queryAttributes(?!.*CanonicalClassName=)", line):
print line