2016-07-20 8 views
-2

Javaを使用して文字列からセグメントを抽出しようとすると問題が発生しました。元の文字列はtest/data/20/0000893220-97-000850.txtのようになり、3番目の後ろにあるセグメントを抽出したい/Javaで正規表現を修正するにはどうすればよいですか?

私の正規表現は

String m_str = "test/data/20/0000893220-97-000850.txt"; 
Pattern reg = Pattern.compile("[.*?].txt"); 
Matcher matcher = reg.matcher(m_str); 
System.out.println(matcher.group(0)); 

のように期待される結果が0000893220-97-000850であるが、明らかにされて、私は失敗しました。どうすれば修正できますか?

+0

「[^ /。] +(?= \\。txt) ' – 4castle

+0

[試してみてください](https://regex101.com/r/zX7eQ3/1) –

+0

あなたは@beepretty良い? – halfer

答えて

1

[^\/]+$

https://regex101.com/r/tS4nS2/2

これは、スラッシュの後に含まれている文字列の最後のセグメントを抽出します。 の3番目のセクションとは対照的に、それが必要な場合はうまくいくはずです。

一致を検索して抽出するには、一致グループは必要ありません(したがって、()はありません)。.matches()は文字列全体を比較しようとしますので、パターンを検索するように指示する必要があります。ここでは、関連するビットとhere is a full exampleは次のとおりです。

matcher.find(); //finds any occurrence of the pattern in the string 
System.out.println(matcher.group()); //returns the entire occurence 

コール.group()内部インデックスの欠如に注意してください。

別のノートでは、Javaで、あなたは必ず正規表現を必要としない - 最後の部分を抽出するには、これは

String[] matches = m_str.split('/'); 
String matched = matches[matches.length-1]; 
ながら、3番目のセグメントをキャプチャしますプレーンJava

String matched = m_str.split('/')[2]; 

を使用して行うことができます

あなたに最後の部分を与えますか?

+0

ありがとう!それは助けになる! – beepretty

関連する問題