0

私はこのような文字列を持っています。

myString = "Logged in as: MyUserName (Administrator)"

を除くすべての部品を取り外すにはどうすればよいMyUserNameですか?

これまでのところ、(Administrator)パーツを削除することしかできませんでした。

System.out.println(myString.replaceAll("\\([^()]*\\)", ""));
4

8 に答える 8

2

私は以下を使用します:

public static void main(String[] args) {    
    final String myString = "Logged in as: MyUserName (Administrator)";
    final Pattern pattern = Pattern.compile("^[^:]++:\\s*+(\\S++).*+$");
    final Matcher matcher = pattern.matcher(myString);
    if(matcher.matches()) {
        System.out.println(matcher.group(1));
    }
}

出力

MyUserName

これは、一致が見つからない場合に高速な所有格マッチャーを使用します。

于 2013-03-14T14:23:24.357 に答える
2

マッチンググループを使用することをお勧めします。「(」および「)」を使用して正規表現の一部を照合し、すべての文字列をグループのコンテンツに置き換えることができます。

次に例を示します。

String myString = "Logged in as: MyUserName (Administrator)";
System.out.println(myString.replaceAll("^[^:]*:\\s+([a-zA-Z]+)\\s.*$", "$1"));

出力:

MyUserName

正規表現

^[^:]*:\\s+([a-zA-Z]+)\\s.*$

ユーザー名と一致する一致するグループ([a-zA-Z] +)が含まれます。文字列全体の一部が、この最初に一致したグループのコンテンツ(この場合は$ 1)に置き換えられます。

于 2013-03-14T14:04:18.117 に答える
1

文字列が常にで始まることが確実な場合はLogged in as:、次のことを試すことができます。

    String myString = "Logged in as: MyUserName (with parentheses) (Administrator)";
    String login = myString.substring("Logged in as:".length(), myString.lastIndexOf('(')).trim();

これはMyUserName (with parentheses)

lastIndexOfユーザー名に括弧を含めることができないことが確実なindexOf場合は、に置き換えることができます。

より単純なバージョンは次のようになります。

    String myString = "Logged in as: MyUserName (with parentheses) (Administrator)";
    String login = myString.substring(myString.indexOf(':'), myString.indexOf('(')).trim();
于 2013-03-14T14:02:43.287 に答える
1

私はあなたの入力でこの正規表現をテストしました:

[^:]*:\s*([^(]*).*

またはJavaの場合:

Pattern p = Pattern.compile("[^:]*:\\s*([^(]*).*");
Matcher m = p.matcher("Logged in as: MyUserName (Administrator)");
if(m.find()) {
   System.out.println(m.group(1));
}

ちなみに、RegexPlanetは正規表現を書くためのあなたの友達です:)

于 2013-03-14T14:03:31.477 に答える
1

これは私のために働いた:myString.replaceAll(".+:(.+)\\(.+\\)", "$1")

最初のを含むすべての文字に一致します:。それが見つかると、最初の文字が見つかるまで、次のすべての文字をキャプチャグループに書き込みます(。次に、一致したすべてのコンテンツ(文字列全体である必要があります)を、セクションであるキャプチャグループのコンテンツに置き換えますMyUserName

別のバージョンはこれである可能性があります:セクションmyString.replaceAll(".+:\\s*(.+)\\s*\\(.+\\)", "$1")から余分な空白文字を削除しますMyUserName

于 2013-03-14T14:05:12.690 に答える
1

これを試して:

System.out.println(myString.replaceAll(".*?:\\s*(\\w+).*", "$1");

これは、最初のコロン、コロン自体、およびそれに続く空白までのすべてを無視し、ユーザー名をキャプチャして、それに続くすべてを無視します。次に、一致全体(つまり文字列全体)を最初にキャプチャされたグループ、つまりユーザー名に置き換えます。

パターン構文のドキュメントも参照してください:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

于 2013-03-14T14:07:22.987 に答える
1

あなたはこれを試すことができます:

String myString = "Logged in as: MyUserName (Administrator)";
String myUserName = myString.replaceAll(".+:(.+)(\\(.+)", "$1").trim();
于 2013-03-14T14:15:54.850 に答える
-1

私の意見では、Patternオブジェクトを使用する必要があります。マッチャーを使用すると、パラメーターを抽出できます。このコードはあなたを助けることができます:

Pattern p = Pattern.compile("Logged in as: (.)+ (Administrator)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(myString);
if (m.find()) {
   return m.group(1);
}

else {
   System.out.println("Not found !");
}

それが役立つことを願っています:)

于 2013-03-14T14:06:08.937 に答える