私は基本的にファイル名であるStringを持っています。私は特定のファイル名の一部の を取得する必要があります。秒 - ダッシュの前の値です。ファイル名はフォーマット例になります:java Regexでは、どのようにfileNameの特定の部分を取得できますか?
ファイル名014qsqs-xxxxyyyzzz.txt
私は結果として取得する必要があります:
ファイル名014qsqs
どのように私は正規表現を使用することができますそれに?これを理解しようとすると
私は基本的にファイル名であるStringを持っています。私は特定のファイル名の一部の を取得する必要があります。秒 - ダッシュの前の値です。ファイル名はフォーマット例になります:java Regexでは、どのようにfileNameの特定の部分を取得できますか?
ファイル名014qsqs-xxxxyyyzzz.txt
私は結果として取得する必要があります:
ファイル名014qsqs
どのように私は正規表現を使用することができますそれに?これを理解しようとすると
、正規表現テスターを使用して参考にすることができ
おかげで(例えば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
を持っています。
"([^-]*-[^-]*)-.*"
説明:
これを2つ以上のダッシュを含むファイル名でクロスチェックしましたか? –
これは本当に役立ちますが、私は2番目の " - "の前にすべてが必要です。この場合、 "fileName-014qsqs" – ErEcTuS
@ErEcTuS編集 –
あなたは、この正規表現を使用することができます任意の文字が、 "を - " と表現される "[は^ - ]" それゆえ
([^-]*-[^-]*)
は、非のシーケンスをキャプチャ" - "文字は1つの " - "で区切られ、次に2番目の " - "の後ろにはさらにテキストが続きます。
こんにちは、私はおそらく、しばらく操作を行うと、2見つける「を - 」stop.Sryは、あなたが `、あなたの例では014qsqs`を抽出するために何をしたいですので
をコメントすることはできませんか?これまでに何を試しましたか?それは正規表現でなければならないのでしょうか、ダッシュでファイル名を分割しても問題ありませんか? – Thomas
なぜこれは正規表現を使用したいのですか?正規表現は、文字列と関係があるタスクのゴールデンハンマーではなく、単純な 'indexOf'と' substring'がここで仕事をします。 – Jesper
http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java – user2173372