Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R “的正则表达式”;至多;_R_Regex_Stringr - Fatal编程技术网

R “的正则表达式”;至多;

R “的正则表达式”;至多;,r,regex,stringr,R,Regex,Stringr,我目前正在考虑如何最好地将“最多两个”表示为正则表达式 str_detect(“xxx”,“x{0,2}”)给出了真值,我理解原因。例如,由于前两个x。我想要一个正则表达式,它给出FALSEstr_detect(“xxx”,“x{0,2}[^x]”实现了这一点,这很好stru检测(“xxx”,“x{0,2}(?!x)”)导致TRUE,因此我非常惊讶。为什么会这样 你能想出比x{0,2}[^x]更聪明的正则表达式吗?我认为没关系,但我想知道是否有更简短的解决方案。你应该准确地解释“最多”的含义。您

我目前正在考虑如何最好地将“最多两个”表示为正则表达式

str_detect(“xxx”,“x{0,2}”)
给出了
真值
,我理解原因。例如,由于前两个
x
。我想要一个正则表达式,它给出
FALSE
<代码>str_detect(“xxx”,“x{0,2}[^x]”实现了这一点,这很好
stru检测(“xxx”,“x{0,2}(?!x)”)
导致
TRUE
,因此我非常惊讶。为什么会这样


你能想出比
x{0,2}[^x]
更聪明的正则表达式吗?我认为没关系,但我想知道是否有更简短的解决方案。

你应该准确地解释“最多”的含义。您正在使用表达式来表示0、1或2次出现,并用
{0,2}
表示

但是,单字符重复可以立即连续发生,也可以在两者之间的某个距离内发生。也就是说,重复可以是连续的,也可以是非连续的。在前一种情况下,我们在肯定上下文中使用
x{0,2}
,在否定上下文中使用
x{3}
,在后者中,我们必须使用量化的否定字符类来排除字符,如
(?:[^x]*x){0,2}
(肯定上下文)/
(?:[^x]*x){3}
(否定上下文)

积极/消极语境是什么?当你说“最多2个”时,等于“不超过3个”。因此,如果匹配出现N+1次,则匹配应失败。在大多数情况下,积极语境是与常规消费语境一起设置的,而消极语境通常是在消极环视中设置的

“最多”示例

  • 字符串中最多出现两个连续的
    b
    字符:
    str\u detect(c(“aaa”、“abc”、“abb”、“bbb”、“babnbdb”),“^(?)*b{3}”)
    (=>
    [1]TRUE-TRUE-FALSE
  • 一句话中最多连续重复两次
    b
    str\u extract\u all(“aaa abc abb bbb babnbdb”,“\\b(?\\p{L}*b{3})\\p{L}+\\b”)
    (=>
    [1]“aaa”“abc”“abb”“babnbdb”
  • 一个字符串中最多2次非连续重复
    b
    str\u detect(c(“aaa”、“abc”、“abb”、“bbb”、“babnbdb”),“^(?:[^b]*b){0,2}[^b]*$”
    (=>
    [1]真-假
  • 在任何单词中,一个
    b
    字母最多两次非连续重复:
    str\u extract\u all(“aaa abc abb babnbdb”,“\\b(?)(?:[\\p{L}--[b]*b{3})\\p{L}+\\b”)
    (=>
    [1]“aaa”“abc”“abb”

请参见

您应该精确定义“最多”的含义。您正在使用表达式来表示0、1或2次出现,并用
{0,2}
表示

但是,单字符重复可以立即连续发生,也可以在两者之间的某个距离内发生。也就是说,重复可以是连续的,也可以是非连续的。在前一种情况下,我们在肯定上下文中使用
x{0,2}
,在否定上下文中使用
x{3}
,在后者中,我们必须使用量化的否定字符类来排除字符,如
(?:[^x]*x){0,2}
(肯定上下文)/
(?:[^x]*x){3}
(否定上下文)

积极/消极语境是什么?当你说“最多2个”时,等于“不超过3个”。因此,如果匹配出现N+1次,则匹配应失败。在大多数情况下,积极语境是与常规消费语境一起设置的,而消极语境通常是在消极环视中设置的

“最多”示例

  • 字符串中最多出现两个连续的
    b
    字符:
    str\u detect(c(“aaa”、“abc”、“abb”、“bbb”、“babnbdb”),“^(?)*b{3}”)
    (=>
    [1]TRUE-TRUE-FALSE
  • 一句话中最多连续重复两次
    b
    str\u extract\u all(“aaa abc abb bbb babnbdb”,“\\b(?\\p{L}*b{3})\\p{L}+\\b”)
    (=>
    [1]“aaa”“abc”“abb”“babnbdb”
  • 一个字符串中最多2次非连续重复
    b
    str\u detect(c(“aaa”、“abc”、“abb”、“bbb”、“babnbdb”),“^(?:[^b]*b){0,2}[^b]*$”
    (=>
    [1]真-假
  • 在任何单词中,一个
    b
    字母最多两次非连续重复:
    str\u extract\u all(“aaa abc abb babnbdb”,“\\b(?)(?:[\\p{L}--[b]*b{3})\\p{L}+\\b”)
    (=>
    [1]“aaa”“abc”“abb”

请参见

x{1,2}
将匹配字符串中的任何位置的1或2
x
。如果需要查找3个或更多,请使用
x{3,}
。如果你想匹配一个在任何地方最多只出现两次
x
的字符串,请使用
^(?[^x]*x){0,2}[^x]*$
-。因为在
x{0,2}(?!x)
中,当没有x出现时,它可以匹配
xx
,请参见
x{0,2}[^x]
不能在只有x的字符串中匹配
x{0,2}[^x]
在我看来非常好,事实上它正好抓住了你的意思太好了,谢谢你的评论!我认为
[^x]x{0,2}[^x]
是最好的。因为
“xxxa”
匹配x{0,2}[^x]。我还不认识正则表达式测试器,它很棒!如果希望不允许出现x或1个可能直接后跟另一个x
^[^x]*x{0,2}[^x]*$
x{1,2}
将匹配字符串中的任何位置的1或2
x
。如果需要查找3个或更多,请使用
x{3,}
。如果你想匹配一个在任何地方最多只出现两次
x
的字符串,请使用
^(?[^x]*x){0,2}[^x]*$
-。因为在
x{0,2}(?!x)
中,当没有x出现时,它可以匹配
xx
,请参见
x{0,2}[^x]
不能在只有x的字符串中匹配
x{0,2}[^x]
在我看来非常好,事实上它正好抓住了你的意思