2013-10-12 55 views
-1

我想要將字符串與字符串之前和之後的字符分開。在字符串中的模式之前分隔一個字符

我有一個像這樣的字符串ihavehashasaahasabig有一個3「模式」的模式,我想在第一個「有」之前有一個字符,最後一個字符是「有」。

輸出應該是這樣的。

ehashasaahasa

但是,當我用這個代碼

String seq1="ihavehashasaahasabig"; 
    Pattern pat =Pattern.compile("\\w.has.*?has.*?has.\\w"); 
    Matcher m=pat.matcher(seq1); 
    while (m.find()) 
    { 
     System.out.println(m.group());} 

輸出是這樣的: - vehashasaahasab

現在我應該怎麼做才能解決我的問題。

+0

從兩端刪除'\\ w'。 –

+0

這很難。除非你知道每一個模式('有'只是一個,還有多少個),你不會用正則表達式來實現它。正則表達式就像其他任何系統一樣,你必須告訴它做什麼。如果你有無限的可能性,那麼嘗試就會很頭疼。所以我會問'我有多少模式匹配',如果你不能回答這個問題,那麼正則表達式不適合你的情況 – gwillie

+0

@gwillie他只是想匹配第一個'has'到最後'has'。正則表達式我不會那麼困難。 –

回答

2

修改您的正則表達式來.has.*?has.*?has.

String seq1="ihavehashasaahasabig"; 
Pattern pat =Pattern.compile(".has.*?has.*?has."); 
Matcher m=pat.matcher(seq1); 
while (m.find()) 
{ 
    System.out.println(m.group());} 

輸出 ehashasaahasa

+0

@感謝你的工作 – Sarah

1

您可以使用貪婪量詞:

Pattern pat =Pattern.compile(".has.*has."); 

貪心量詞的中間是忽略。

1

我想之前,首先要有一個字符 「有」

可以過去後使用String#replaceFirst(regex)

str = str.replaceFirst("has", "e$0")); 

一個字 「有」,使用負前瞻是這樣的:

str = str.replaceAll("has(?!.*?has)", "$0a")); 
+0

+1因爲你是一個不同的方式 – SpringLearner

+0

你假設前後的字符是'e'和'a'。 –

+0

不,我不是假設我自己的東西:) OP寫道:'輸出應該是這樣的。ehashasaahasa'這些字母'e和a'正用於RHS(替換而不是搜索) – anubhava

0

嘗試這樣還有: -

String seq1="ihavehashasaahasabig"; 
String seq1Rep= seq1.replaceAll("\[ihav\]"); 
String seq2Rep= seq1Rep.replaceAll("\[big\]"); 
System.out.println(seq2Rep); 

輸出: - 這將在字符串中僅更換匹配的單詞,你會得到所需的輸出。

相關問題