gpt4 book ai didi

regex - grep-如何仅使用两个字符来匹配一个正则表达式,但是每个字符出现相同的次数?

转载 作者:行者123 更新时间:2023-12-03 13:46:40 24 4
gpt4 key购买 nike

我使用grep尝试匹配由两个字符组成的行,一个重复,然后重复另一个,但仅当第一个字符出现的次数等于第二个字符出现的次数时才匹配。
例如,假设我只能匹配两个字符,例如“0”和“1”。现在想象一下,如果有n个“0”字符,那么紧随其后必须有n个“1”字符。例如:

  • ''
  • '0011'
  • '000111'
  • '00000000001111111111'

  • 都会匹配。但:
  • '011'
  • '1100'
  • '110001'

  • 不匹配。
    我一直在与捕获组打交道,并在perldoc上进行拖网以获取有关grep -P的更多信息,但没有找到任何解决我的问题的线索-至少与grep有关。
    给定这些约束,我如何制作grep命令来匹配字符串?
    编辑:
  • 在此示例中,按照限制“紧随其后”
  • ,数字0应该在1s之前。
  • 空字符串也应该是一个区分大小写的情况,因为受示例限制,当n个0时,应该有n 1s,因此零个0时就应该有0个1s。
  • 最佳答案

    这行awk应该可以完成这项工作:

    cat file

    0011

    000111
    00000000001111111111
    011
    1100
    11000
    awk '/^0*1*$/ && gsub(/0/, "&") == gsub(/1/, "&")' file

    0011
    000111
    00000000001111111111
    或者,如果您要打印的数字后面可能带有 1,则可以使用 0,然后使用:
    # awk command
    awk '/^(0*1*|1*0*)$/ && gsub(/0/, "&") == gsub(/1/, "&")' file

    0011
    000111
    00000000001111111111
    1100
    gsub函数返回替换数。

    由于您已经使用了 grep标记,因此以下是一个带有 gnu grep(PCRE递归)正则表达式的 -P命令:
    grep -P '^(0(?1)?1|1(?1)?0)?$' file

    0011
    000111
    00000000001111111111
    1100
    grep RegEx Demo

    关于regex - grep-如何仅使用两个字符来匹配一个正则表达式,但是每个字符出现相同的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66395945/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com