Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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 - Fatal编程技术网

R 如何在匹配特定模式的每个单词前后添加突出显示?

R 如何在匹配特定模式的每个单词前后添加突出显示?,r,R,我的代码可以检测字符串文本中的各种模式(特别是检测所有数字,无论它们是数字形式、文本形式、小数、美元符号等等)。我已经将所有这些模式存储在一个名为“nums”的变量中。(不要担心我模式中的错误,这不是我所关注的) nums nums [1] (3)除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除

我的代码可以检测字符串文本中的各种模式(特别是检测所有数字,无论它们是数字形式、文本形式、小数、美元符号等等)。我已经将所有这些模式存储在一个名为“nums”的变量中。(不要担心我模式中的错误,这不是我所关注的)

nums nums
[1] (3)除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除|七十|八十九|十万|百万|十亿|万亿| b{1,4}(CM | CD | d | C{0,3})(XC | XL L | X{0,3})(IX | IV | V | I{0,3})|0,4}{{0,0 0 0,4}(CM{0,4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,4}(CM{1,4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))))的(C{(XC(XC\12455 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周上周(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,3}(1,3}(5 5 5 5 5 5 5 5 5 5 0,3})(XC | XL | L?X{0,3})(IX | I?V | V?I{1,3}))\\b“
linesNums)到使用存储在“nums”中的my patterns检测到的每个数字。所以最终的结果是这样的:

#example text:
I am <<twenty>> years old.
I have <<$50.45>> in my pocket.
This tree is <<100,000>> years old.
#示例文本:
我今年岁了。
我口袋里有。
这棵树已经好几年了。
我如何做到这一点?当我尝试使用gsub时,我的最终结果是:

linesNums <- cat(gsub(nums, "<<\\1>>", linesNums))

I am <<nums>> years old.
I have <<nums>> in my pocket.
This tree is <<nums>> years old.

linesNums您需要执行多个替换。有一个基本的R版本,还有一个使用
stringr
的替代版本

请注意,我必须避开美元符号才能完成此操作(已编辑)

显然,您仍然需要处理正则表达式模式

库(stringr)
努姆斯[2]“我今年岁。”
#>[3]“我口袋里有。”
#>[4]“这棵树有,年了。”
#基本R功能:
“我二十岁。”
#>[2]“我岁了。”
#>[3]“我口袋里有。”
#>[4]“这棵树有,年了。”

由(v0.3.0)创建于2020-04-13。如果您包含一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案,则更容易帮助您。
\\1
部分将返回第一个捕获的匹配。您的正则表达式似乎有很多捕获组,您可能对单独捕获不感兴趣。也许把这些设置成非捕获组,或者确保你周围有一组你想把它当作一个数字?另一种选择是使用<代码>斯特林格< <代码>来帮助。例如:
stringr::str_replace_all(lines,nums,function(x){paste0(“”)})
但是你可以看到你的正则表达式有一些问题。哦,你的正则表达式中有区间
{1-3}
,但是stringr引擎没有意识到这是有效的。假设您希望匹配发生1-3次,则应将其更改为
{1,3}
。这就是
{1,3}
的意思。你在所有其他情况下都正确使用了它。我对使用
gsub()
感到惊讶,因为使用破折号实际上不是一个有效的正则表达式(至少不是在
?regexp
帮助页面上定义的)
linesNums <- cat(gsub(nums, "<<\\1>>", linesNums))

I am <<nums>> years old.
I have <<nums>> in my pocket.
This tree is <<nums>> years old.