簡體   English   中英

用於查找特殊字符后面或前面的單詞位置的正則表達式

[英]regular expression for finding a word position followed or preceded by special character

我想在一個長字符串中找到一個單詞的位置。 該單詞可以在特殊字符之前或之后,但不能是字母數字字符。 所以,如果我搜索德國和字符串包含德國! 或者$ germany或$ germany)(或德國我想要它的位置。我怎么能為此寫一個正則表達式。我試過這個(?i)(?<= ^ | [^ az])德國(?= $ | [ ^ az])但它不起作用。

String s="(?i)(?<=^|[^a-z])germany(?=$|[^a-z])";
Pattern p= Pattern.compile("(?i)(?<=^|[^a-z])cat(?=$|[^a-z])");
Matcher m=p.matcher(" germany@ is germany");
System.out.println(m.matches());

每次都返回一個假。 你能建議一個正確的方法嗎? 我想找到這樣的詞並替換它們。

雖然上面的答案是正確的,但使用這個正則表達式可以提高效率

        Pattern p = Pattern.compile("(?<![^\\W_])" + string + "(?![^\\W_])");

你的工作應該花更少的時間

  1. 您需要使用matcherobject.find()方法來查找匹配的子字符串。 matches方法將嘗試針對整個輸入字符串檢查正則表達式。

  2. Pattern p= Pattern.compile("(?i)(?<=^|[^A-Z0-9a-z])germany(?=$|[^A-Z0-9a-z])");

如果不是字母數字,則需要在否定字符類中使用A-Z0-9

ArrayList<Integer> positions = new ArrayList();
String s = "germany@ is germany";
Pattern p= Pattern.compile("(?i)(?<=^|[^a-zA-Z\\d])(g)ermany(?=$|[^a-zA-Z\\d])");
Matcher m=p.matcher(s);
while(m.find())
{
positions.add(m.start());
}
System.out.println(positions);

輸出:

[0, 12]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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