#で始まる単語を除いて数字を削除する正規表現


8

文字、数字、「#」記号を含むことができる文字列があります。

「#」で始まる単語以外の数字を削除したい

次に例を示します。

"table9 dolv5e #10n #dec10 #nov8e 23 hello"

そして予想される出力は:

"table dolve #10n #dec10 #nov8e  hello"

どうすればこれを正規表現、ストリンガー、またはgsubで実行できますか?

回答:


6

必要なものをキャプチャし、不要なものを空の(キャプチャされていない)に置き換えてみてはどうでしょう。

gsub("(#\\S+)|\\d+","\\1",x)

regex101のデモまたはtio.runのRデモを参照してください(Rの経験はありません)。

私の答えは、の間に常に空白があると仮定しています#foo bar #baz2。あなたのような何かを持っている場合は#foo1,bar2:#baz3 4使用\w(ワード文字)の代わりに、\S(非空白を)。


5

文字列をスペースで分割し、「#」で始まらない場合はトークンから数字を削除して貼り付けます。

x <- "table9 dolv5e #10n #dec10 #nov8e 23 hello"
y <- unlist(strsplit(x, ' '))
paste(ifelse(startsWith(y, '#'), y, sub('\\d+', '', y)), collapse = ' ')
# output 
[1] "table dolve #10n #dec10 #nov8e  hello"

1

桁を削除するには、gsubを使用します。次に例を示します。

gsub("[0-9]","","table9")
"table"

そして、strsplitを使用して文字列を分割できます。

STRING = "table9 dolv5e #10n #dec10 #nov8e 23 hello"
strsplit(STRING," ")
[[1]]
[1] "table9" "dolv5e" "#10n"   "#dec10" "#nov8e" "23"     "hello"

「#」を持たない要素にのみ適用するgsubを使用して、STRINGを反復処理するだけです

STRING = unlist(strsplit(STRING," "))
no_hex = !grepl("#",STRING)
STRING[no_hex] = gsub("[0-9]","",STRING[no_hex])
paste(STRING,collapse=" ")
[1] "table dolve #10n #dec10 #nov8e  hello"

0

ベースRソリューション:

unlisted_strings <- unlist(strsplit(X, "\\s+"))

Y <- paste0(na.omit(ifelse(grepl("[#]", unlisted_strings),

                           unlisted_strings,

                           gsub("\\d+", "", unlisted_strings))), collapse = " ")

Y 

データ:

X <- as.character("table9 dolv5e #10n #dec10 #nov8e 23 hello")

これは望ましい出力を与えません。
user2474226

0
INPUT = "table9 dolv5e #10n #dec10 #nov8e 23 hello";
OUTPUT = INPUT.match(/[^#\d]+(#\w+|[A-Za-Z]+\w*)/gi).join('');

フラグを削除できます。i大文字と小文字は区別されません。

次のパターンを使用します。 [^#\d]+(#\w+|[A-Za-Z]+\w*)

[^#\d]+ =#と数字なしで始まる文字=#を #\w+ 検索し、その後に数字または文字を続ける[A-Za-z]+\w*=文字を検索し、その後に文字または数字、あるいはその両方を 検索する^ | \D+\S*=でこれを変更できます。最初の文字だけでなく、その後に文字や数字が続くだけでなく、任意の文字を検索できます。= \w+\w*\w同じ原因ではないです[\w\d]

私はJavaScriptでコードを試してみましたが、うまくいきました。文字だけでなく一致する場合は、コードを使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.