はあなたが'
以外の1つの以上の文字があり、その後、'
で終わり、その後、'
で始まるすべての重複しない部分文字列と一致する必要がありますと仮定しましょう。パターンは'[^']+'
です。
その後、次の基本Rコードを使用することがあります。
x = "The 'quick cunning brown' fox 'jumps up and over' the lazy dog"
gr <- gregexpr("'[^']+'", x)
mat <- regmatches(x, gr)
regmatches(x, gr) <- lapply(mat, gsub, pattern="\\s", replacement="_")
x
## => [1] "The 'quick_cunning_brown' fox 'jumps_up_and_over' the lazy dog"
はthis R demoを参照してください。すぐに無\
前 -
(?<!\\)
:または、gsubfn
を使用します。 (?<!\\)(?:\\{2})*\K'[^'\\]*(?:\\.[^'\\]*)*'
詳細:
> library(gsubfn)
> rx <- "'[^']+'"
> s = "The 'quick cunning brown' fox 'jumps up and over' the lazy dog"
> gsubfn(rx, ~ gsub("\\s", "_", x), s)
[1] "The 'quick_cunning_brown' fox 'jumps_up_and_over' the lazy dog"
>
エスケープシーケンスをサポートするには、はるかに複雑なPCRE正規表現を使用することができます現在の場所
(?:\\{2})*
- ゼロ以上の配列2 \
S
\K
から一致リセットオペレータ
'
- ゼロ以上 - '
と\
(?:\\.[^'\\]*)*
よりゼロ以上の文字他の -
[^'\\]*
単一引用符
\\.
- a \
のいずれかのc単一引用符 - HARが、改行
[^'\\]*
から'
と\
'
以外のゼロ個以上の文字。
そしてR demoが
x = "The \\' \\\\\\' \\\\\\\\'quick \\'cunning\\' brown' fox 'jumps up \\'and\\' over' the lazy dog"
cat(x, sep="\n")
gr <- gregexpr("(?<!\\\\)(?:\\\\{2})*\\K'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", x, perl=TRUE)
mat <- regmatches(x, gr)
regmatches(x, gr) <- lapply(mat, gsub, pattern="\\s", replacement="_")
cat(x, sep="\n")
出力のようになります。
あなたが安っぽい心を持っている場合にのみ
The \' \\\' \\\\'quick \'cunning\' brown' fox 'jumps up \'and\' over' the lazy dog
The \' \\\' \\\\'quick_\'cunning\'_brown' fox 'jumps_up_\'and\'_over' the lazy dog
;) – geotheory
あなたが内部のエスケープシーケンスを考慮する必要がありますか?適切にエスケープされた文字列を扱っていますか?関連する '' .... .... ''部分文字列全体をマッチさせることができれば、マッチ内のテキストを置き換えることができます。 –