2016-11-25 8 views
-2

pythonの文字列変数に保存されたソースコードファイル名を抽出しようとしています。以下のようにしかし、変数は、HTMLタイプのタグや他のコンテンツの多くが含まれています。しかし正規表現Pythonを使用してテキストからファイル名を抽出する

<p> Result = FAILURE<br/ hshreedharan : <a href="http://git-wip- 
<ul> 
<li>flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java</li>  
<li>flume-ng-sinks/flume-hdfs-sink/src/test/java/org/apache/flume/sink/hdfs/TestBucketWriter.java</li> 
<li>flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java</li> 
<li>sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java</li> 
<li>sink.src.main.java.org.apache.flume.sink.hdfs.BucketWriter.java</li>   
</ul> 

、私は他のすべてのテキスト、HTMLタグを無視して、出力のみを抽出するためのpythonライブラリを使用して「再」適切な正規表現を探しています変数に含まれるソースコードファイル

flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java 
flume-ng-sinks/flume-hdfs-sink/src/test/java/org/apache/flume/sink/hdfs/TestBucketWriter.java 
flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java 
sink.src.main.java.org.apache.flume.sink.hdfs.BucketWriter.java 
sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java 

現在、私は次のコードを使用しています:適切な正規表現や機能変更のための

import re 

    htmlText= \\ may be variable containing above code 

    matchSrcFiles= re.findall('\\.[^.]*.java$', htmlText) \\text ending .java 

ヘルプのような、のrelaventソースコードファイルを抽出するre.subは理解されるものとします。

+0

なぜあなたはre.subを使用したいのですか?パターンを他のパターンと照合して置き換えますか? – MYGz

+0

実際、私はソースコードファイルを抽出するだけです。 re.subまたはre.findallが有効かどうかを問い合わせる。 – Analyzer

+0

re.findall()はジョブを行います。 re.sub()は置換に使用されます。 – MYGz

答えて

1

チェックこの:([a-zA-Z-.\/]+.java)

import re 

a="""<p> Result = FAILURE<br/ hshreedharan : <a href="http://git-wip- 
<ul> 
<li>flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java</li>  
<li>flume-ng-sinks/flume-hdfs-sink/src/test/java/org/apache/flume/sink/hdfs/TestBucketWriter.java</li> 
<li>flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java</li> 
</ul> 
channel/src/main/java/org/apache/flume/channel/file/protoProtosFactory.java. 
sink.src.main.java.apache.flume.sink.java 
""" 

pat = "([a-zA-Z-.\/]+.java)" 
c = re.findall(pat,a) 
print c 

出力:Regex101上

['flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java', 'flume-ng-sinks/flume-hdfs-sink/src/test/java/org/apache/flume/sink/hdfs/TestBucketWriter.java', 'flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java', 'channel/src/main/java/org/apache/flume/channel/file/protoProtosFactory.java', 'sink.src.main.java.apache.flume.sink.java'] 

デモ:https://regex101.com/r/zzFpKJ/3

+0

ありがとう、それはうまく動作します – Analyzer

+0

Mohammad Yusuf Ghazi、さらに親切にあなたのメールアドレスを共有できますか?ありがとう – Analyzer

+0

あなたの問題を解決した場合、答えを受け入れることを検討:)答えの左側にチェックマークをクリックしてください。 – MYGz

関連する問題