2

2 つのアポストロフィの境界内にあるものを除いて、文字列内のすべてのアンダースコアを置き換える必要があります。例えば:

"first_name" => "first name"
"code_numbers = '123_456'" => "code numbers = '123_456'"

私は現在、.replaceAll("_", "") を使用してすべてのアンダースコアを破棄していますが、それらは非常に一般的ではないため、念のためにすべてのベースに触れたいと考えています。

4

2 に答える 2

1

言及されていない単純な正規表現ソリューションがあったため、この質問を復活させます。(正規表現バウンティクエストの調査中にあなたの質問を見つけました。)

'[^']*'|(_)

交代試合の左側は完了'single quoted strings'です。これらの一致は無視されます。右側はアンダースコアをグループ 1 に一致させてキャプチャします。左側の式では一致しなかったため、それらが右側のアンダースコアであることがわかります。

ここに作業コードがあります(オンラインデモを参照):

import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.util.List;

class Program {
public static void main (String[] args) throws java.lang.Exception  {

String subject = "code_numbers = '123_456'";
Pattern regex = Pattern.compile("'[^']*'|(_)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
    if(m.group(1) != null) m.appendReplacement(b, " ");
    else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
System.out.println(replaced);
} // end main
} // end Program

参照

  1. 状況 s1、s2、s3 以外でパターンを一致させる方法
  2. パターンを一致させる方法...
于 2014-05-19T23:50:59.393 に答える