2016-10-18 10 views
2

この文字列を有効にします。この文字列にregex - すべての整数を二重引用符で囲みます

0000,0767,"078", 0785, "0723",23487, 345 , 07334

"0000","0767","078", "0785", "0723","23487", "345" , "07334"

これは、正規表現に来るとき、私はいつも少し負の検索と混同して、このような取得、私はそれを得ることができる最も近いです。

[^"\d,]?(\d+)"$1"と交換 - https://regex101.com/r/qVQYA7/1

残念ながらこれがそうのように、すでに彼らの周りに二重引用符を持つ整数の二重引用符包まれ、その結果、

"0000","0767",""078"","0785", ""0723"","23487","345" ,"07334"

擬似ロジックです。 がない場合はに既に二重引用符が含まれている整数を探し、二重引用符を追加します。そのままカンマの間にスペースを入れてください。

答えて

1

あなたが引用された数字にマッチするのを避けるために、あなたの正規表現で前後参照を使用することができます。

(?<!")(\b\d+\b)(?!") 

Updated Regex Demo

正規表現の分裂:

(?<!") # Negative lookbehind to skip the match if previous character is " 
(  # captured group #1 open 
    \b # assert word boundary 
    \d+ # match 1 or more digits 
    \b # assert word boundary 
)  # captured group close 
(?!") # Negative lookahead to skip the match if next character is " 

あなたはPCREを使用している場合、あなたはこのPCRE動詞を使用できます:

"\d+"(*SKIP)(*F)|(\d+) 
+1

これは完璧に動作し、すべての私のデータ値に適合おかげ – Novocaine

2

"?(\d+)"?を検索し、"$1"に置き換えるだけで簡単に検索できます。 「存在がある場合は、それらが一致したが、グループに含まれていない 。

+0

これは簡単な解決策だろうが、しかし、私は 'そうのようないくつかの事例があるというのが私の例の文字列に追加することを怠っ"+232987" 'この場合、動作しません。しかし、あなたのコードが私の例にちゃんと答えるので、あなたはまだ私からupvoteを取得します。 – Novocaine

1

のは、あなたのケースで数値の各シーケンスは、コンマ,が続くべきであるか、文字列の端部に位置するとしましょう。
は以下を使用します。正規表現:。。

(\d+)\s*?(?=,|$) 

https://regex101.com/r/qVQYA7/3

+0

幸いですが、私が必要とするデータに合っていますが、私は1つの答えしか受け入れられません。 ;) – Novocaine

+0

@ノボカイン、それはOKです – RomanPerekhrest

関連する問題