簡體   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