Ein Regex zum Entfernen von Ziffern mit Ausnahme von Wörtern, die mit # beginnen


8

Ich habe einige Zeichenfolgen, die Buchstaben, Zahlen und das Symbol '#' enthalten können.

Ich möchte Ziffern mit Ausnahme der Wörter entfernen, die mit '#' beginnen.

Hier ist ein Beispiel:

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

Und die erwartete Ausgabe ist:

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

Wie kann ich das mit Regex, Stringr oder Gsub machen?

Antworten:



5

Sie können die Zeichenfolge auf Leerzeichen aufteilen, Ziffern aus Token entfernen, wenn diese nicht mit '#' beginnen, und zurück einfügen:

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

Sie verwenden gsub, um Ziffern zu entfernen, zum Beispiel:

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

Und wir können Ihren String mit strsplit teilen:

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

Wir müssen nur STRING mit gsub durchlaufen und es nur auf Elemente anwenden, die kein "#" haben.

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

Base R-Lösung:

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

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

                           unlisted_strings,

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

Y 

Daten:

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

Dies ergibt nicht die gewünschte Ausgabe.
user2474226

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

Sie können Flags entfernen i, da die Groß- und Kleinschreibung nicht berücksichtigt wurde

Verwenden Sie dieses Muster: [^#\d]+(#\w+|[A-Za-Z]+\w*)

[^#\d]+ = Zeichen beginnen mit keinem # und Ziffern #\w+ = find # gefolgt von Ziffer oder Buchstabe [A-Za-z]+\w*= find letter gefolgt von Buchstabe und / oder Zahl ^ | Sie können dies ändern mit \D+\S*= finden Sie ein beliebiges Zeichen, nicht nur, wenn das erste ein Buchstabe ist und nicht nur ein Buchstabe und / oder eine Zahl. Ich werde nicht als \w+\w*Ursache \wwie = angegeben [\w\d].

Ich habe den Code in JavaScript ausprobiert und er funktioniert. Wenn Sie eine Übereinstimmung nicht nur gefolgt von einem Buchstaben wünschen, können Sie Code verwenden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.