繁体   English   中英

在 R 中使用 Rebus package 复制正则表达式

[英]Replicating regex expression using Rebus package in R

我想使用 R 中的rebus package 为以下文本字符串创建一个模式。

我的尝试如下,但我无法删除方括号并使用str_view()返回相同的模式。 是否有一个工具 / function 可以使用 rebus package 复制正则表达式? 当与可能不熟悉正则表达式的人共享代码时,Rebus 更容易阅读并且有意义。

带有正则表达式的模式:

pattern = "http.*for-sale.*5857"

我正在尝试使用 rebus package 来复制它:

pattern_rebus = "http" %R% zero_or_more(ANY_CHAR) %R% "for-sale" %R% zero_or_more(ANY_CHAR) %R% "5857"

as.regex(pattern_rebus)
<regex> http[.]*for-sale[.]*5857

rebus中有一个错误,它用[]包装了所有重复的( one_or_morezero_or_more )字符,即字符 class。 这就是为什么.*应该手动添加的原因。

pattern_rebus = "http" %R% ".*" %R% "for-sale" %R% ".*5857"
as.regex(pattern_rebus)
## => <regex> http.*for-sale.*5857

但是,您可以使用变通方法[\s\S]而不是. 如果您使用 PCRE 正则表达式(带有基本 R 正则表达式函数)或 ICU 正则表达式(带有stringr正则表达式函数),将匹配任何字符:

pattern_rebus = "http" %R% zero_or_more(char_class(WRD, NOT_WRD)) %R% "for-sale" %R% zero_or_more(char_class(WRD, NOT_WRD)) %R% "5857"
as.regex(pattern_rebus)
## => <regex> http[\w\W]*for-sale[\w\W]*5857

或者,如果您想匹配除 CR 和 LF 之外的任何字符:

pattern_rebus = "http" %R% zero_or_more(negated_char_class("\\r\\n")) %R% "for-sale" %R% zero_or_more(negated_char_class("\\r\\n")) %R% "5857"
as.regex(pattern_rebus)
## => <regex> http[^\r\n]*for-sale[^\r\n]*5857

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM