gpt4 book ai didi

regex - 单词/字符的选择性正则表达式

转载 作者:行者123 更新时间:2023-12-02 06:37:11 26 4
gpt4 key购买 nike

我想替换字符串中单词 Date 的所有情况,除非它是 Date()(即 Date 后跟括号)。这是一个字符串示例以及我最初尝试的内容:

x <- c("frDate", "Date()", "Date", "Sys.Date()")
gsub("Date", paste("Date:", Sys.Date()), x)

我得到的:

> gsub("Date", paste("Date:", Sys.Date()), x)
[1] "frDate: 2013-04-04" "Date: 2013-04-04()" "Date: 2013-04-04"
[4] "Sys.Date: 2013-04-04()"

我想要什么:

> gsub("Date", paste("Date:", Sys.Date()), x)
[1] "frDate: 2013-04-04" "Date()" "Date: 2013-04-04"
[4] "Sys.Date()"

我想也许我可以从我的 previous question 中学习关于此事:

gsub("(?=[^Date\\(\\)[^Date]])", paste("Date:", Sys.Date()), x)

不太好。

如果有人有更好的标题使这个解决方案更通用,请更改它,以便 R regex 用户可以搜索处理异常的方法。

最佳答案

只需在您的模式中添加一个与左括号匹配的否定前瞻断言。 (您还必须设置 perl=TRUE 才能获得此功能。)

gsub("Date(?!\\()", paste("Date:", Sys.Date()), x, perl=TRUE)
[1] "frDate: 2013-04-04" "Date()" "Date: 2013-04-04"
[4] "Sys.Date()"

这个名字听起来很吓人,我怀疑像 #@!$%^&* 这样的符号串会把人们吓跑,但实际上并没有那么复杂:只需输入 (? !...),将 ... 替换为您希望整个正则表达式匹配的任何模式。在这里,我们希望任何以 Date 开头但随后以 ( 继续的字符串不匹配,所以(转义 ( 因为它是特殊字符)我们写 (?!\\))

关于regex - 单词/字符的选择性正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816236/

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