gpt4 book ai didi

r - 如何改进跳过两个单词之一的正则表达式?

转载 作者:行者123 更新时间:2023-12-04 01:03:48 24 4
gpt4 key购买 nike

我有一个文本,我想将所有 comprata、comprate、comprati、comprato 更改为 comprat+,并将所有 ricomprata、ricomprate、ricomprati、ricomprato 更改为 ricomprat+。所以我写了这个正则表达式,但它跳过了两个词之一:

testo <- 'ricomprate uno comprato comprata due comprate ricomprate tre ricomprato comprati'
base::gsub('(\\s|^)(ri|)comprat[aeio](\\s|)', '\\1\\2comprat+\\3', testo)
结果是:
"ricomprat+ uno comprat+ comprata due comprat+ ricomprate tre ricomprat+ comprati"

最佳答案

由于尾随 (\s|) 模式消耗空格并阻止连续匹配,您的正则表达式不起作用。
您可以使用 PCRE 正则表达式,例如

testo <- 'ricomprate uno comprato comprata due comprate ricomprate tre ricomprato comprati'
gsub('(?<!\\S)((?:ri)?comprat)[aeio](?!\\S)', '\\1+', testo, perl=TRUE)
[1] "ricomprat+ uno comprat+ comprat+ due comprat+ ricomprat+ tre ricomprat+ comprat+"
this regex demo 。细节:
  • (?<!\S) - 左侧空白边界
  • ((?:ri)?comprat) - 第 1 组:可选的 ri 字符串,然后是 comprat
  • [aeio](?!\S) - eaio 后跟右侧空白边界

  • 或者,像 TRE 正则表达式
    testo <- 'ricomprate uno comprato comprata due comprate ricomprate tre ricomprato comprati'
    gsub('\\b((?:ri)?comprat)[aeio]\\b', '\\1+', testo)
    ## => [1] "ricomprat+ uno comprat+ comprat+ due comprat+ ricomprat+ tre ricomprat+ comprat+"
    请参阅 R demo onlinethis regex demo ,其中 \b 代表单词边界。

    关于r - 如何改进跳过两个单词之一的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67210148/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com