R 提取字符串,但有一些例外
我有一堆这样的字符串:R 提取字符串,但有一些例外,r,regex,R,Regex,我有一堆这样的字符串: w <- c("milan 01", "New York", "las vegas 123", "London abc") 期望的: #[1] "milan" "New York" "las vegas" "London" 你可以用 > library(stringr) > w <- c("Milan 01", "New York", "Las vegas 123", "London abc") > str_extract(w,
w <- c("milan 01", "New York", "las vegas 123", "London abc")
期望的:
#[1] "milan" "New York" "las vegas" "London"
你可以用
> library(stringr)
> w <- c("Milan 01", "New York", "Las vegas 123", "London abc")
> str_extract(w, "^\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?")
# => [1] "milan" "New York" "las vegas" "London"
详细信息
-字符串的开头^
-1+个字母(如果您计划只支持ASCII,可以使用\\p{L}+
)[a-zA-Z]+
-可选的(?:\\s+(?!abc\\b)\\p{L}+)
-1+空格\\s+
-不(?!abc\\b)
作为一个整体,允许直接在当前位置的右侧abc
-1个以上字母\\p{L}+
sub
等效物:
> sub("(?s)^(\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?).*", "\\1", w, perl=TRUE)
> ## OR > sub("(?s)^(?!abc\\b)(\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?).*", "\\1", w, perl=TRUE)
[1] "milan" "New York" "las vegas" "London"
在这里,
(?s)
使
匹配任何字符,包括换行符,整个特定部分用捕获括号括起来,匹配被替换为第1组值。请记住,我可能不知道哪个城市有“abc”
,我只知道有一个。然后你需要一个负前瞻^[a-zA-Z]+(?:+(?!abc\\b)[a-zA-Z]+)
谢谢,这很有效。如果我不知道“abc”模式会怎样?我必须找到所有错误的模式并添加它们,我想,或者有其他方法吗?@RLave您不必全部添加,但您应该知道要排除的模式。否则,无法使用regex。
> str_extract(w, "^(?!abc\\b)\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?")
^^^^^^^^^^
> sub("(?s)^(\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?).*", "\\1", w, perl=TRUE)
> ## OR > sub("(?s)^(?!abc\\b)(\\p{L}+(?:\\s+(?!abc\\b)\\p{L}+)?).*", "\\1", w, perl=TRUE)
[1] "milan" "New York" "las vegas" "London"