在R中分解长正则表达式

在R中分解长正则表达式,r,regex,R,Regex,问题:我使用的是R和stringr,我有一个非常长的正则表达式,使用了“or”操作符,我将其保存到一个对象并与stringr一起使用。如何在R中将其拆分为多行,以便不必在源代码编辑器中一直向右滚动?当我尝试使用逗号时,只识别第一行。这个问题的大多数答案都是针对其他编程语言的(即不是R) regex\u of_sites正则表达式只是一个字符串。您可以像任何其他字符串一样跨多行将其粘贴在一起 regex_of_sites <- paste0("side|southeast|north|com

问题:我使用的是R和stringr,我有一个非常长的正则表达式,使用了“or”操作符,我将其保存到一个对象并与stringr一起使用。如何在R中将其拆分为多行,以便不必在源代码编辑器中一直向右滚动?当我尝试使用逗号时,只识别第一行。这个问题的大多数答案都是针对其他编程语言的(即不是R)


regex\u of_sites正则表达式只是一个字符串。您可以像任何其他字符串一样跨多行将其粘贴在一起

regex_of_sites <- paste0("side|southeast|north|computer|engineer|",
     "first|south|pharm|left|southwest|",
     "level|second|thirteenth")

regex\u of_sites由于您将模式与使用ICU regex flavor的stringr方法一起使用,因此可以使用
(?x)
自由间距(也称为verbose,或ignore pattern whitespace)修饰符,在编译模式时忽略所有未转义的空白,还有一种可能是在每一行上的未转义的
之后添加注释(因此,所有的文本
都必须转义)

以下是一个例子:

> library(stringr)
> regex_of_sites <- "(?x)side     # Term 0
+ |southeast                      # Term 1
+ |north                          # Term 1
+ |computer                       # Term 2
+ |engineer
+ |first
+ |south
+ |pharm
+ |left
+ |southwest
+ |level
+ |second
+ |thirteenth"
> str_extract_all("first level", regex_of_sites)
[[1]]
[1] "first" "level"
>库(stringr)
>regex_of_sites str_extract_all(“第一级”,regex_of_sites)
[[1]]
[1] 第一级

相同的修饰符由基R R正则函数中使用的PCRE模式支持,使用<代码> Perl=Trime< /Cer>。< /P>它是用于字符串解析的吗?它不能用于正则表达式。@sln它是从R环境中复制粘贴的。因此,您应该使用忽略空白选项和您的代码。在您完全使用它之后,

(?x)(?:计算机|工程师|第一|勒(?:ft | vel)|北|法尔| s(?:second ide | outh(?:东|西)| |十三
> library(stringr)
> regex_of_sites <- "(?x)side     # Term 0
+ |southeast                      # Term 1
+ |north                          # Term 1
+ |computer                       # Term 2
+ |engineer
+ |first
+ |south
+ |pharm
+ |left
+ |southwest
+ |level
+ |second
+ |thirteenth"
> str_extract_all("first level", regex_of_sites)
[[1]]
[1] "first" "level"