簡體   English   中英

如何編寫正則表達式以刪除字符串開頭和字符串結尾的部分,並在中間保存部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM