Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:从第一个字符到字符串末尾的正则表达式_R_Regex - Fatal编程技术网

R:从第一个字符到字符串末尾的正则表达式

R:从第一个字符到字符串末尾的正则表达式,r,regex,R,Regex,我这里有这样的字符串: a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et" b <- "-ten, -ter, -terne" 我已经找到了一个解决方案,但感觉不是很令人满意或优雅 a <- unlist(strsplit(a, " |,")) a <- a[grep("-", a)] a <- gsub("-", "", a) b <- unlist(strsplit(

我这里有这样的字符串:

a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
我已经找到了一个解决方案,但感觉不是很令人满意或优雅

a <- unlist(strsplit(a, " |,"))
a <- a[grep("-", a)]
a <- gsub("-", "", a)

b <- unlist(strsplit(b, " |,"))
b <- b[grep("-", b)]
b <- gsub("-", "", b)
你有没有一个更优雅的一行的建议,可以提取我想要的所有结尾?

我们可以使用stru-extract

我们可以使用stru提取


我认为您需要匹配一个-它前面没有单词char,也就是说,当它是复合词的一部分时不匹配,并且在连字符后面有一个可选的“字符”,后面跟着1+单词chars。然后,你可以使用

a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
pat <- "\\B-\\K'?\\w+"
res_a <- regmatches(a, gregexpr(pat, a, perl=TRUE))
unlist(res_a)
## [1] "en"  "et"  "'en" "'et"
res_b <- regmatches(b, gregexpr(pat, b, perl=TRUE))
unlist(res_b)
## [1] "ten"   "ter"   "terne"

图案详情:

\\B-非单词边界 --连字符 \\K-匹配重置运算符 '? - 可选的' \\w+-1个或多个字母、数字或_
我认为您需要匹配一个-它前面没有单词char,也就是说,当它是复合词的一部分时不匹配,并且在连字符后面有一个可选的“字符”,后面跟着1+单词chars。然后,你可以使用

a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
pat <- "\\B-\\K'?\\w+"
res_a <- regmatches(a, gregexpr(pat, a, perl=TRUE))
unlist(res_a)
## [1] "en"  "et"  "'en" "'et"
res_b <- regmatches(b, gregexpr(pat, b, perl=TRUE))
unlist(res_b)
## [1] "ten"   "ter"   "terne"

图案详情:

\\B-非单词边界 --连字符 \\K-匹配重置运算符 '? - 可选的' \\w+-1个或多个字母、数字或_
如果你想把它保持在R底,我不认为你会得到比你所拥有的更优雅的东西,你总是可以把它做成一行。grep的value参数可能会对您有所帮助,如下所示

也许吧


可以考虑稍微优雅一点。

如果你想把它保持在R底,我不认为你会得到比你拥有的更优雅的东西,你总是可以把它做成一行。grep的value参数可能会对您有所帮助,如下所示

也许吧


可以认为稍微优雅一些。

如果在a-,之前必须有一个空格/字符串开头,那么将\\B替换为?。感谢您的精彩解释。我通常只使用正则表达式进行更简单的操作,因此很高兴了解更复杂的操作是如何工作的。如果在a-,之前必须有一个空格/字符串的开头,那么将\\B替换为?。感谢您的精彩解释。我通常只在简单的操作中使用正则表达式,所以了解更复杂的操作是如何工作的很好。什么是非字符?什么是非字符?
a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
pat <- "\\B-\\K'?\\w+"
res_a <- regmatches(a, gregexpr(pat, a, perl=TRUE))
unlist(res_a)
## [1] "en"  "et"  "'en" "'et"
res_b <- regmatches(b, gregexpr(pat, b, perl=TRUE))
unlist(res_b)
## [1] "ten"   "ter"   "terne"
substring(grep("-'?\\w", strsplit(a, " ")[[1]], value = TRUE), 2)
gsub("-", "", grep("-'?\\w", strsplit(a, " ")[[1]], value = TRUE)