2017-07-19 8 views
0

一重引用符が文字列に含まれているが、一重引用符の直後に一重引用符が続く場合は除きます。2つの連続する二重引用符を除いた文字列の一重引用符の数を数える正規表現

例:

'singlequote','another single quote' 

カウント4と

'singlequote','2 quote'' inside single quote' 

を与える必要がありますが、また数4

を与える必要があり、私はこの

char quote= '\''; 
int count2 = string.replaceAll("[^"+ quote +"]", "").length(); 

をしましたが、これはすべてのoccurencをカウントes。

正規表現でそれを行う方法はありますか、すべての文字をループする必要がありますか?誰か助けてもらえますか?

+4

3重引用符または4重引用符はどのように処理しますか? –

+0

'\ ''のように一重引用符でエスケープすることはできますか? – anubhava

+0

これは基本的にDB2クエリーに適用する必要があります。一重引用符をエスケープするために使用されていますので、Kevin O 'Brianを列で更新する必要がある場合は、' Kevin O '' Brian 'として渡す必要があります。文字Oの後の引用符は、無視する必要があります。 – Neel

答えて

2

文字列内のすべて''|[^']を置き換えることができます。 2つの一重引用符と一重引用符以外はすべて置き換えられます。

例:

出力 4を与える
int count2 = string.replaceAll("''|[^']", "").length(); 

参照DEMO:

StringUtils.countOccurrencesOf(yourString.replaceAll("''", ""), "'") 

は、インポートを確認します:https://ideone.com/PqtRu6

+0

[これはうまくいきます](https://ideone.com/PuAUyA)。 –

2

このルックアラウンドベースの正規表現を使用して、前後に一重引用符を付けない一重引用符を一致させることができます。複数引用符のすべての場合をスキップするので、二重引用符または三重引用符は一致しないことに注意してください。

(?<!')'(?!') 

RegEx Demo

正規表現の分裂:

  • (?<!') - 単一引用符
  • (?!')一致 - - 場合アサートを前の文字が単一引用符
  • 'ない場合はアサート次の文字は歌わないle quote
+0

[lookaroundのみベースの正規表現はここでは動作しません。](https:// regex101。com/r/Pq0FG7/1) '(?<! ')'(?! ')'はCSVで間違ったアプローチです。 –

+0

なぜですか?いずれかの側で別の一重引用符で囲まれていない見積もりにのみ一致します。 – anubhava

+0

先頭と末尾の '' 'はマッチしません。 –

1

はここで空の文字列を持つすべての2連続で引用符を交換し、発生をカウント、それを行うための別の方法だ

import org.springframework.util.StringUtils; 
+0

これはすべての出現を取り除くので私の目的を解決しません、私は一重引用符のペアの間に来るものだけを無視する必要があります。だから、「David」、「 '、」Kevin O「Brian」は私に結果を6で与えてくれるはずではない。 – Neel

+0

あなたの例では、2つの一重引用符(合計8つの一重引用符)が表示されます:「David」、「 '」、「Kevin O' 'Brian' –

関連する問題