0

特定のプロパティ行を抽出する必要があるプロパティファイルがあります。

私のプロパティファイルの内容は次のとおりです。

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

手伝ってください。

ありがとう

4

2 に答える 2

2

^[datahelper.CIT]その文字グループの文字の1つに一致します。それはあなたが望むものではありません。

このようなものが機能します:

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
于 2013-02-13T08:43:32.633 に答える
2
for line in file:
    if re.match("datahelper\.\w+\.queryAttributes", line): 
        print line

datahelper.この正規表現は、で始まり、1つ以上の英数字、その後に.queryAttributes(およびその後の任意の数の文字)が続く行と一致します。

同じ行に含まれるものをさらに回避するためCanonicalClassName=に、先読みアサーションを追加できます。

for line in file:
    if re.match("datahelper\.\w+\.queryAttributes(?!.*CanonicalClassName=)", line): 
        print line
于 2013-02-13T08:43:45.567 に答える