.properties文件的Python正则表达式

时间:2013-02-13 08:40:31

标签: python regex

我有一个属性文件,我需要从中提取一些特定的属性行:

我的属性文件内容是:

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

请协助。

谢谢

2 个答案:

答案 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