2017-03-05 8 views
0

私は正規表現の例を見つけようとしていますが、見つけられないかもしれません: 私は文字列中の単語の最初の文字と一致する正規表現を探しています、私はそれを省略したい。たとえば、Regexは単語の最初の文字と一致してそれを省略します

String example = "Blueberry strawberry peach Banana"; 

最初の文字または単語がbまたはBで始まる場合は、重要ではありません。省略して、strawberry peachのみを返します。

提案がありますか?

+0

正規表現を使用する必要がありますか? – Mureinik

+0

スペースで分割し、単語がより妥当であるかどうかを確認してください – dizpers

+0

正規表現を使用して対処することが可能かどうかを知りたいだけです。 – killburn

答えて

2

あなたはreplaceAllでこの正規表現を使用することができます。

String input = "Blueberry strawberry peach Banana"; 

String repl = input.replaceAll("\\s*\\b[Bb]\\S*\\s*", ""); 
//=> strawberry peach 

\\s*\\b[Bb]\\S*\\s*Bまたは上の0以上のスペースに囲まbで始まる任意の単語に一致します言葉のどちらかの側。

1

あなたはそれを試すことができます。

(?:^|\s+)(?![Bb])[^\s]* 

Demo

サンプル:

final String pat = "(?:^|\\s+)(?![Bb])[^\\s]*"; 
final String string = "Blueberry strawberry peach Banana kela lau bishu "; 
Pattern p = Pattern.compile(pat); 
Matcher m = p.matcher(string); 
while (m.find()) 
    if (!m.group(0).trim().isEmpty()) 
     System.out.println(m.group(0)); 
+0

または '\ b [^ Bb] \ S *'だけです。 –

+0

これは期待どおりhttp://regexr.com/で動作します。 Rawingが提案した "\ b [^ Bb] \ S *"は、Bbとのテキストを別個のマッチに分けるだけです。 –

+0

@JonathanSchmoldあなたは正しく、私の悪いです。しかし、この正規表現の '(?:^ | \\ s +)'は、読みやすさと欠点をなくすために '\ b'と置き換えることができます(しかし' * 'を' + 'マッチ)。 –

0

これが解決策になることができます:

public static void main(String[] args) { 
    String example = "Blueberry strawberry peach Banana"; 
    String res =""; 
    for(String word : example.split(" ")){ 
     if(!Pattern.matches("[Bb].*",word)){ 
      res += word+" "; 
     } 
    } 
    res = res.substring(0, res.length()-1); 
    //Print the result 
    System.out.println(res); 
} 

あなたは言葉がドンをWICHだけ保ちます'あなたのルールにトンマッチ(ここではB又はB「で始まり」)

関連する問題