删除特定序列后的第一个字符

时间:2016-06-13 10:46:07

标签: regex r string

我很难理解如何删除特定序列后的第一个字符。举个例子:

string <- "26 765 64 673 762"

我想删除76之后和67之后的第一个字符,因此预期的结果将是:

string <- "26 76 64 67 76"

有关如何使用正则表达式执行此操作的任何提示?

3 个答案:

答案 0 :(得分:3)

您可以仅使用

gsub("(76|67).", "\\1", string)

其中(76|67)匹配7667.匹配任何字符(因为gsubperl=TRUE参数一起使用,使用TRE正则表达式引擎。

要仅在7667之后匹配数字,请使用\\d[0-9]

gsub("(76|67)\\d", "\\1", string)
             ^^^

您需要\1 反向引用67或76子字符串捕获 >捕获群组 (67|76)。因此,您需要gsub("(67|76).", "\\1 ", string) \\17667,并且空格是您添加到字符串而不是任何字符匹配的< / 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”