你好,我想就如何转换PCRE REGEX到ICU REGEX的建议,这样我就可以使用R函数字符串( str_match_all包的一部分)。
在这些REGEX101演示中,@Wiktor Stribiżew能够生成REGEX PCRE解析:
https://regex101.com/r/m4UD0j/17
此解析捕获aa和bb组合(每个组合前面有任意长度的任意数字),然后捕获cc组(前面类似地有数字),例如10aa5bb6bb3bb6aa999cc998cc997cc
因此,可以将字符串看作两个部分:
第一个是前面有一个数字的aa或bb组合的随机集合(例如,这可能都是aa )。
后半部分是前面有一个数字的一系列cc (尽管这可能只是一个cc)。
重要的是,字符串的两边都要一起捕获,文本和数字都要特别捕获。因此,有效的捕获是,例如:
2aa2cc
323233aa21212bb4555cc
1aa2aa3aa4aa5aa6aa117cc8cc
1bb2bb3bb4bb5bb6bb117cc8cc
1aa2bb3bb4aa5bb6bba117cc8cc
1aa2bb3bb4aa5bb6bba117cc8ccXXXXXXXXXX1aa2bb3bb4aa5bb6bba117cc8cc
无效:
2aa *Only one side of the string is there*
1aa2bb3bb4aa *Only one side of the string is there*
99cc100cc *Only one side of the string is there*
另外,我想要一个单独的REGEX表达式,用于字符串中'cc‘组排在前面的实例,例如999cc998cc997cc10aa5bb6bb3bb6aa。这里演示了这一点:https://regex101.com/r/m4UD0j/18
注意:文本模式aa、bb和cc实际上是较长字符串的缩写,因此应该这样处理。我提供了较短的版本,以避免出现更令人困惑的示例。
这两个演示展示了组合的不同顺序的正则表达式。
现在我必须使用str_match_all在R中运行,不幸的是,它使用的是ICU正则表达式,而不是我们在REGEX101中测试的pcre正则表达式。
所以我有这段代码,它抛出了一个还没有实现的使用的regexp特性。(U_REGEX_UNIMPLEMENTED)错误:
#REGEX TEST#
library(stringr)
regex_text_1 <- "8aa9aa10bb1cc2cc3cc"
#reg_pattern_1 that worked in REGEX101 <- "(?:\G(?!^)(?(?=\d+(?:aa|bb))(?<!\dcc))|(?=(?:\d+(?:aa|bb))+(?:\d+cc)+))(\d+)(aa|bb|cc)"
reg_pattern_1 <- "(?:\\G(?!^)(?(?=\\d+(?:aa|bb))(?<!\\dcc))|(?=(?:\\d+(?:aa|bb))+(?:\\d+cc)+))(\\d+)(aa|bb|cc)"
regex_text_2 <- "1cc2cc3cc8aa9bb10bb"
#reg_pattern_2 that worked in REGEX101 <- "(?:\G(?!^)(?(?=\d+cc)(?<!\d(?:aa|bb)))|(?=(?:\d+cc)+(?:\d+(?:aa|bb))+))(\d+)(aa|bb|cc)"
reg_pattern_2 <- "(?:\\G(?!^)(?(?=\\d+cc)(?<!\\d(?:aa|bb)))|(?=(?:\\d+cc)+(?:\\d+(?:aa|bb))+))(\\d+)(aa|bb|cc)"
sm <- str_match_all(regex_text_1, reg_pattern_1)
sm.df <- as.data.frame(sm)
print(sm.df)
sm <- str_match_all(regex_text_2, reg_pattern_2)
sm.df <- as.data.frame(sm)
print(sm.df)
实际上我希望它输出如下所示的内容:
X1 X2 X3
1 8aa 8 aa
2 9aa 9 aa
3 10bb 10 bb
4 1cc 1 cc
5 2cc 2 cc
6 3cc 3 cc
和
X1 X2 X3
1 1cc 1 cc
2 2cc 2 cc
3 3cc 3 cc
4 8aa 8 aa
5 9aa 9 aa
6 10bb 10 bb
...as如果我们在pcre中应用它,它就会。
我不是足够的专家来转换代码从pcre到icu,所以我真的很感激一些帮助。非常感谢。
https://stackoverflow.com/questions/52282657
复制相似问题