我有这样的字符串;
myString = "Logged in as: MyUserName (Administrator)"
如何删除MyUserName
以外的所有部分?
到目前为止,我只是删除了(Administrator)
部分。
System.out.println(myString.replaceAll("\\([^()]*\\)", ""));
答案 0 :(得分: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)。
答案 1 :(得分: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
这使用了faster when no match is found的正面匹配器。
答案 2 :(得分: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();
答案 3 :(得分: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是你写regexes的朋友:)
答案 4 :(得分:1)
这对我有用:myString.replaceAll(".+:(.+)\\(.+\\)", "$1")
它将匹配所有字符,包括第一个:
。一旦找到,它会将所有下一个字符写入捕获组,直到找到第一个(
。然后它会将所有匹配的内容(应该是整个字符串)替换为捕获组的内容,即MyUserName
部分。
另一个版本可能就是这样:myString.replaceAll(".+:\\s*(.+)\\s*\\(.+\\)", "$1")
会删除MyUserName
部分中的任何额外空白字符。
答案 5 :(得分:1)
试试这个:
System.out.println(myString.replaceAll(".*?:\\s*(\\w+).*", "$1");
这会忽略第一个冒号,冒号本身及其后面的任何空格的所有内容,捕获用户名并忽略其后的所有内容。然后它用第一个捕获的组替换整个匹配(即整个String),即用户名。
另请参阅模式语法docs:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
答案 6 :(得分:1)
你可以试试这个:
String myString = "Logged in as: MyUserName (Administrator)";
String myUserName = myString.replaceAll(".+:(.+)(\\(.+)", "$1").trim();
答案 7 :(得分:-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 !");
}
希望它会有所帮助:)