[英]How to write Regex to remove parts in beginning of string and end of string, and save parts in the middle
我有這樣的字符串;
myString = "Logged in as: MyUserName (Administrator)"
如何刪除除MyUserName
之外的所有部分?
到目前為止,我僅設法刪除了(Administrator)
部分。
System.out.println(myString.replaceAll("\\([^()]*\\)", ""));
我建議使用匹配組。 您可以使用“(”和“)”來匹配正則表達式的一部分,然后將所有字符串替換為該組的內容。
這是一個例子:
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)。
我將使用以下內容:
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
如果您確定該字符串始終以“以以下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)
如果您確定用戶名不能包含括號,則可以用indexOf
替換lastIndexOf
。
一個更簡單的版本是:
String myString = "Logged in as: MyUserName (with parentheses) (Administrator)";
String login = myString.substring(myString.indexOf(':'), myString.indexOf('(')).trim();
我已經用您的輸入測試了此正則表達式:
[^:]*:\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的朋友:)
這對我myString.replaceAll(".+:(.+)\\\\(.+\\\\)", "$1")
: myString.replaceAll(".+:(.+)\\\\(.+\\\\)", "$1")
它將匹配所有字符,包括第一個:
。 找到后,將所有下一個字符寫入捕獲組,直到找到第一個(
。之后,它將所有匹配的內容(應為整個字符串)替換為捕獲組的內容,即MyUserName
部分。
另一個版本可能是: myString.replaceAll(".+:\\\\s*(.+)\\\\s*\\\\(.+\\\\)", "$1")
,它將刪除MyUserName
部分。
嘗試這個:
System.out.println(myString.replaceAll(".*?:\\s*(\\w+).*", "$1");
這將忽略直到第一個冒號為止的所有內容,冒號本身以及它后面的所有空白,捕獲用戶名並忽略其后的所有內容。 然后,它將整個匹配項(即整個字符串)替換為第一個捕獲的組,即用戶名。
另請參見模式語法文檔: http : //docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
您可以嘗試以下方法:
String myString = "Logged in as: MyUserName (Administrator)";
String myUserName = myString.replaceAll(".+:(.+)(\\(.+)", "$1").trim();
在我看來,您應該使用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 !");
}
希望它會有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.