我很难理解如何删除特定序列后的第一个字符。举个例子:
string <- "26 765 64 673 762"
我想删除76之后和67之后的第一个字符,因此预期的结果将是:
string <- "26 76 64 67 76"
有关如何使用正则表达式执行此操作的任何提示?
答案 0 :(得分:3)
您可以仅使用
gsub("(76|67).", "\\1", string)
其中(76|67)
匹配76
或67
和.
匹配任何字符(因为gsub
与perl=TRUE
参数一起使用,使用TRE正则表达式引擎。
要仅在76
或67
之后匹配数字,请使用\\d
或[0-9]
:
gsub("(76|67)\\d", "\\1", string)
^^^
您需要\1
反向引用在67或76
子字符串捕获 >捕获群组 (67|76)
。因此,您需要gsub("(67|76).", "\\1 ", string)
\\1
为76
或67
,并且空格是您添加到字符串而不是任何字符匹配的< / em>使用.
。
有关使用正则表达式进行字符串替换的更多信息,请访问regular-expressions.info,可以找到一些示例here。
答案 1 :(得分:0)
使用此模式:(?<=76|67)\d
使用全局标志来匹配字符串76
或`67之后的任何单个数字字符。然后什么都不用。你应该有一个替换方法。
您始终可以使用Regex101来测试正则表达式。我已保存此表达式供您使用here。
(?<=76|67)
部分是一个积极的后顾之忧。它会在其中查找模式,但不会在结果匹配中包含这些字符。 76|67
表示模式76
或模式67
,因此lookbehind将匹配任一模式。然后\d
只有在满足后备后才会匹配一个数字。
或者,正如Regex101针对/(?<=76|67)\d/g
所解释的那样:
(?<=76|67) Positive Lookbehind - Assert that the regex below can be matched
1st Alternative: 76
76 matches the characters 76 literally
2nd Alternative: 67
67 matches the characters 67 literally
\d match a digit [0-9]
g modifier: global. All matches (don't return on first match)
答案 2 :(得分:0)
您可以在gsub函数中使用\\ w来匹配76 | 67
之后的单词WPF
[1]“26 76 64 67 76”