Regex R中的正则表达式,仅当后面的内容

Regex R中的正则表达式,仅当后面的内容,regex,r,Regex,R,是否有一种优雅的方式来匹配上面的字符串中的2011和750000。其思想是在看起来像数值时提取数值,即.\d+或\d+[\,]?\d*取决于后面是否有逗号 我试过这个,但它不完全符合我想要的,我得到了2011年,这是不好的 my_string = "2011, this year I made 750,000 dollars" 以下是我的预期结果: library(stringr) str_match_all(fkin, "(\\d+[\\.,]?\\d*) 你可以做: "2011" "75

是否有一种优雅的方式来匹配上面的字符串中的2011和750000。其思想是在看起来像数值时提取数值,即.\d+或\d+[\,]?\d*取决于后面是否有逗号

我试过这个,但它不完全符合我想要的,我得到了2011年,这是不好的

my_string = "2011, this year I made 750,000 dollars"
以下是我的预期结果:

library(stringr)
str_match_all(fkin, "(\\d+[\\.,]?\\d*)
你可以做:

"2011" "750,000"
它非常优雅,我在镜子前试过了。

这里有一个单正则表达式纯基R方法来提取整数或浮点值,这些值不是用连字符分隔的数字字符串的一部分:

[0-9]+(?:[,.][0-9]+)*
请参阅和。 由于正则表达式包含lookarounds,因此需要指定perl=TRUE参数

模式说明:

? - 当当前位置前面有一个带hyhen的数字时,匹配失败的负查找 \b\d+-在下一个数字之前的单词边界,不能有单词字符-字母、数字或数字_ ?:[,.]\d++-非捕获组?:。。。匹配逗号或点[,.]的1或0个序列,后跟1或多个数字,并且此序列以占有方式匹配请参见“+”,以便正则表达式引擎不会检查\b\d之后是否有连字符+ ?!- - 如果检测到的数字后有连字符,则会导致匹配失败的负loookahead。
抱歉,它能工作,thk u,不知道嵌套括号@casimir,抱歉什么意思?:抱歉再次询问,但如果出于某种原因750000-589是一个子字符串,而我不想匹配它,因为它看起来更像电话号码或参考?@hansglick:?:。。。是一个非捕获组,但是阅读基本的正则表达式教程可以避免很多问题。@hansglick:关于电话号码的问题,我建议添加-[0-9]+?在图案的末尾。然后,您可以在捕获组存在时筛选结果中的项目。
> str <- "2011, this year I made 750,000 dollars and 750,000-589 here"
> regmatches(str, gregexpr('(?<!\\d-)\\b\\d+(?:[,.]\\d+)?+(?!-)', str, perl=T))[[1]]
[1] "2011"    "750,000"