2017-05-09 2 views
0

私は基本的にファイル名であるStringを持っています。私は特定のファイル名の一部の を取得する必要があります。秒 - ダッシュの前の値です。ファイル名はフォーマット例になります:java Regexでは、どのようにfileNameの特定の部分を取得できますか?

ファイル名014qsqs-xxxxyyyzzz.txt

私は結果として取得する必要があります:

ファイル名014qsqs

どのように私は正規表現を使用することができますそれに?これを理解しようとすると

+5

をコメントすることはできませんか?これまでに何を試しましたか?それは正規表現でなければならないのでしょうか、ダッシュでファイル名を分割しても問題ありませんか? – Thomas

+3

なぜこれは正規表現を使用したいのですか?正規表現は、文字列と関係があるタスクのゴールデンハンマーではなく、単純な 'indexOf'と' substring'がここで仕事をします。 – Jesper

+1

http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java – user2173372

答えて

2

、正規表現テスターを使用して参考にすることができ

おかげで(例えばhttp://www.regexplanet.com/advanced/java/index.html

あなたが探しているものと一致し(.*?-.*?)-.*正規表現。

.*:回

?、任意の数の任意の文字:それは非貪欲作り、それが唯一の可能な限り少ないが一致するん

-:リテラルダッシュ

():括弧グループにして抽出できるようにします。

全体のプログラムは次のようになります。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Main 
{ 
    public static void main(String atrgs[]) 
    { 
     String line = "fileName-014qsqs-xxxxyyyzzz.txt"; 
     Pattern pattern = Pattern.compile("(.*?-.*?)-.*"); 
     Matcher matcher = pattern.matcher(line); 
     while (matcher.find()) { 
      System.out.println(matcher.group(1)); 
     } 
    } 
} 

と出力fileName-014qsqsを持っています。

"([^-]*-[^-]*)-.*" 

説明:

+0

これを2つ以上のダッシュを含むファイル名でクロスチェックしましたか? –

+0

これは本当に役立ちますが、私は2番目の " - "の前にすべてが必要です。この場合、 "fileName-014qsqs" – ErEcTuS

+0

@ErEcTuS編集 –

0

あなたは、この正規表現を使用することができます任意の文字が、 "を - " と表現される "[は^ - ]" それゆえ

([^-]*-[^-]*) 

は、非のシーケンスをキャプチャ" - "文字は1つの " - "で区切られ、次に2番目の " - "の後ろにはさらにテキストが続きます。

0

こんにちは、私はおそらく、しばらく操作を行うと、2見つける「を - 」stop.Sryは、あなたが `、あなたの例では014qsqs`を抽出するために何をしたいですので

関連する問題