正则表达式获取捕获组的大小

2024-03-12

是否可以编写一个正则表达式,以便我可以稍后在同一正则表达式中引用“第一个捕获组的长度”?我在这里想要实现的是捕获连续发生的情况1后面跟着连续出现的确切次数2's.

我想要类似的东西

r"(1*)(2{length(\1)})" # where `length(\1)` should give me the length of capture group 1

应该匹配

1122 # two 1's followed by two 2's
111222 # three 1's followed by three 2's
121122111222 # should match `12` and `1122` and `111222` separately

不应匹配

122 # there are two 2's following one 1
112 # there are two 1's but only one 2
11222 # same as above but with different occurrences
11122 # same as above but with different occurrences

Update我猜你可能会采用一些荒谬的 Java 前瞻递归模拟,但这是行不通的
或者你可以使用Python来做到这一点?

>>> import regex
>>> rx_1_2 = r"(?m)^(1(?>(?1))*2)$"
>>>
>>> input = '''
... 111222222
... 11222234
... 1111222
... 111222
... 1122
... 12
... '''
>>> res = regex.findall( rx_1_2, input )
>>> print( res )
['111222', '1122', '12']

该问题被标记为 Java 模拟递归的重复项
使用前瞻对于报道此内容的人来说是极其错误的判断 通过将其标记为重复来提出问题。简直就是判断力差...


可以用 python 来完成regex module.
需要用到递归。
这样做是因为它实际上只是嵌套的分隔符。

1
  1
    1
    2
  2
2

1(?>[^12]++|(?R))*2

https://regex101.com/r/4Nxtvl/1 https://regex101.com/r/4Nxtvl/1

                         # Recursion 
 1                       # 1
 (?>                     # Atomic group
      [^12]++                 # Possesive, not 1 or 2
   |                        # or,
      (?R)                    # Recurse the regex
 )*                      # End cluster, do 0 to many times
 2                       # 2

To 不允许内部内容 use 1(?>(?R))*2 https://regex101.com/r/mSUIp0/1 https://regex101.com/r/mSUIp0/1


要添加边界条件,请将递归包含到组中,
然后用边界结构包围它。

(?<!\d)(1(?>[^12]++|(?1))*2)(?!\d)

https://regex101.com/r/SSr1zV/1 https://regex101.com/r/SSr1zV/1

 (?<! \d )               # Not a digit behind
 (                       # (1 start), Recursion code group
    1                       # 1
    (?>                     # Atomic group
       [^12]++                 # Possesive, not 1 or 2
     |                        # or,
       (?1)                    # Recurse the regex group 1
    )*                      # End cluster, do 0 to many times
    2                       # 2
 )                       # (1 end)
 (?! \d )                # Not a digit ahead

To 不允许内部内容 use (?<!\d)(1(?>(?1))*2)(?!\d) https://regex101.com/r/VI6w0Y/1 https://regex101.com/r/VI6w0Y/1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式获取捕获组的大小 的相关文章

随机推荐

  • 如何将 FormUrlEncodedContent 用于复杂数据类型?

    我需要与仅接受表单编码有效负载的第三方端点进行交互 端点需要在此端点上使用复杂的数据类型 这意味着类似这样的内容 但形式编码 而不是 JSON foo bar baz zip zap 我的谷歌搜索和端点的文档表明这应该是这样的形式编码 fo
  • pandas DataFrame 中 x 天每个元素的累积乘积

    我尝试计算 a 中的每个元素Dataframe df1累计积超过x天 例如 3 有没有有效的方法来做到这一点 到目前为止 我只知道在行上生成正常的累积乘积 而不将回溯期固定为x days df2 例如 2022 01 02 ID1 1 05
  • 如何在 C# 中获取活动进程名称?

    如何在 C 中获取活动进程名称 我知道我必须使用这段代码 DllImport user32 dll private static extern IntPtr GetForegroundWindow 但我不知道如何使用它 正如中提到的这个答案
  • 是否可以选择 Windows 表单标签上的文本?

    是否可以突出显示 选择 Windows 窗体标签控件中的部分文本 我知道使用 RTFtextbox 控件是可能的 但使用该控件会有点矫枉过正 因为我需要创建许多标签实例 是否可以选择 Windows 表单标签上的文本 否 至少没有简单的方法
  • 如何总结组合列表

    我有一个包含 2 个元素组合的列表 如下所示 cbnl lt list c A B c B A c C D c E D c F G c H I c J K c I H c K J c G F c D C c E C c D E c C E
  • 使用消息驱动通道适配器和服务激活器进行事务处理

    我正在开发一个 POC 它执行以下操作 使用消息驱动的通道适配器来接收事务中的消息 调用服务激活器 该激活器使用处理程序将从适配器接收到的消息插入到数据库 并将消息发布到出站通道 现在 如果消息的数据库插入失败 我希望 JMS 消息返回到队
  • OpenSSL 使用固定值来生成 Diffie Hellman 密钥

    根据该文件 https wiki openssl org index php Diffie Hellman Using the Low Level APIs https wiki openssl org index php Diffie H
  • xcodebuild 使用哪个版本的 Xcode?

    我在同一台机器上安装了 Xcode 3 2 和 Xcode 4 0 2 它使用 Hudson 进行自动化 CI 持续集成 构建 当我说两者都已安装时 我的意思是我可以同时或交替使用 Xcode 3 和 Xcode 4 它们都存在于机器上 因
  • C++:有效但未指定的状态。这是什么意思? [复制]

    这个问题在这里已经有答案了 我一直在尝试理解 std move This http www cplusplus com reference utility move doc描述得很好 但它在示例部分中说 而 bar 失去了它的值 现在处于有
  • 如何将值注入 TensorFlow 图的中间?

    考虑以下代码 x tf placeholder tf float32 name x z x tf constant 5 0 y tf mul z tf constant 0 5 with tf Session as sess print s
  • jQuery Ajax 请求每 30 秒一次

    我有这段代码 但当有人访问我的网站时 这些值可能会发生变化 我需要每 30 秒左右更新一次 finance div 这可以做到吗 function getJSON http query yahooapis com v1 public yql
  • 输入字符串 1 无效 UTF-8 Shiny 应用程序

    我正在尝试创建一个闪亮的应用程序并不断收到错误Warning Error in sub input string 1 is invalid UTF 8这阻止了我的selectInput从出现 我尝试过使用utf8包将字符串转换为有效的 UT
  • 将一台机器中一个节点的elasticsearch索引移动到同一台机器的另一个驱动器

    我的机器中有一个 elasticsearch 节点 配有 150gb SSD 和 3 TB HDD 由于 SSD 空间不足 我想将一个索引从 SSD 移动到 HDD 这可能吗 如果是这样怎么办 我可以在硬盘上创建另一个节点 但我宁愿在机器上
  • 获取 Woocommerce 订阅的订阅产品作者

    如何遍历所有当前活跃的 woo 订阅并打印发布与每个活跃订阅 PHP 相关的产品的用户的用户 ID 我认为这样的东西只会提供订阅 args array subscriptions per page gt 1 post type gt sho
  • Matlab:使用互协方差对齐数据

    我想获得 Matlab 中两个数据集之间样本的偏移量 让它们及时同步 这是一个很常见的问题 因此 我使用互相关函数 xcorr 或互协方差函数 xcov 在大多数情况下 两者都为此目的提供类似的结果 对于人工数据 它工作得很好 但我在处理
  • Chai-As-Promised 正在吃断言错误

    我在用着柴如许诺 mocha为了写一些硒网络驱动程序测试 由于 webdriver 广泛使用promises 我想如果我使用 chai as promised 进行此类测试会更好 问题是 当测试失败时 mocha 没有正确捕获错误 它只是失
  • 有没有办法检查一个列表的所有元素是否都包含在球拍的另一个列表中?

    我想要一个执行类似操作的函数 gt function 1 2 3 4 1 2 3 4 5 t 在这种情况下返回 t 因为第一个列表的所有元素都包含在第二个列表中 有没有一个函数可以做到这一点而不必担心顺序 在这种情况下 您不会将列表进行比较
  • 如何以百分比形式设置 Ext.grid.ColumnModel 中的宽度?

    如何设置宽度Ext grid ColumnModel以百分比计算 使用总共 100 的列宽数字并使用 ForceFit 配置视图 例如 var grid new Ext grid GridPanel cm new Ext grid Colu
  • 我需要事务来进行连接查询吗?

    在带有连接的sql查询期间 我需要使用事务吗 我在想这样的事情 Delete table1 table2 table3 FROM table1 INNER JOIN table2 ON LEFT JOIN table3 ON WHERE t
  • 正则表达式获取捕获组的大小

    是否可以编写一个正则表达式 以便我可以稍后在同一正则表达式中引用 第一个捕获组的长度 我在这里想要实现的是捕获连续发生的情况1后面跟着连续出现的确切次数2 s 我想要类似的东西 r 1 2 length 1 where length 1 s