テキスト内の文字列を識別し、null 文字列に置き換える必要があります。問題は、単語自体として常に存在するとは限らないことです。各文字または文字セットの間にはスペース文字が存在します。例えば:
「まとも」という言葉について、私は次のような価値観に直面するかもしれません。まともな、まともな、まともな.
「まともな」単語を正規表現の入力として使用して、これらの文字列を識別する方法はありますか? 私は正規表現に非常に慣れていません。助けてください!!
ティア!
テキスト内の文字列を識別し、null 文字列に置き換える必要があります。問題は、単語自体として常に存在するとは限らないことです。各文字または文字セットの間にはスペース文字が存在します。例えば:
「まとも」という言葉について、私は次のような価値観に直面するかもしれません。まともな、まともな、まともな.
「まともな」単語を正規表現の入力として使用して、これらの文字列を識別する方法はありますか? 私は正規表現に非常に慣れていません。助けてください!!
ティア!
表現"D\s*e\s*c\s*e\s*n\s*t"
はそれを行います。各文字の後には、0 個以上のスペースが続きます。実際\s
には「空白文字」です。リテラルスペースだけが必要な場合は、(スペースの後にアスタリスクが続く)に\s*
置き換えることができます。*
\bD\s*e\s*c\s*e\s*n\s*t\s*
だからあなたは一致しますD ec ent, De ce nt, De ce n t, decent Decent
だがしかしblade centimeter
使用する場合
'ちゃんとした ?'
単語と余分なスペースが一致します
最初に少しのコード:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WordsWithSpaces {
public static void main(String[] args) {
String test = "Descent D escent De s cent desce nd";
String word = "descent";
String pattern = "";
for(int i=0; i<word.length();i++) {
pattern = pattern+word.charAt(i)+"\\s*";
}
System.err.println("pattern is: "+pattern);
Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(test);
while(m.find()) {
String found = test.substring(m.start(),m.end());
System.err.println(found+" matches");
}
}
}
説明のために: \s は空白の文字クラスです。これには、スペースとタブ、および (おそらく) 改行が含まれます。このコードでは、探している単語のすべての文字を取得し、「\s」を追加し、「*」は 0 回以上の出現を意味します。
また、大文字と小文字が区別されるのを避けるために、パターンに CASE_INSENSITIVE フラグを設定しました。
文字クラスは、選択したプログラミング言語で同じ名前を持っていない場合がありますが、空白には名前が必要です。ドキュメントを確認してください。