gpt4 book ai didi

regex - 在正则表达式中,当使用星号时,你可以让一些星号在重复的正则表达式中重复相同的次数吗?

转载 作者:行者123 更新时间:2023-12-02 03:50:02 26 4
gpt4 key购买 nike

抱歉这个冗长的问题。最好举个例子。

我正在尝试将矩阵作为字符串进行匹配:

  1. [[]]
  2. [[][][]]
  3. [[0][1][2]]
  4. [[,,][,,][,,]]
  5. [[0,1,2][3,4,5]]

虽然正则表达式看起来很少漂亮,但这是我想出的:

\[(\[-?(\d+(\.\d*)?)*(,-?(\d+(\.\d*)?)*)*\])+\]

它匹配一切。但是,逗号必须始终重复 n 次。如果有 5 个逗号,然后是 4 个逗号,然后是 6 个逗号,则它不是有效矩阵。我可以使用标志或变量吗?或者它在正则表达式的范围之外?

最佳答案

不,正则表达式不能做到这一点。

Here是一个正式的证明,证明与你的情况非常相似的情况是不可能的。证明语言 L = {anbn : n ≥ 0} 不是“正则语言”,所以不能用正则表达式匹配。该语言本质上是 a*b*,其中两颗星重复相同的次数。你的情况还涉及一个星星重复相同的次数,所以这也是不可能的。

在您的情况下,最好的选择可能是使用正则表达式来匹配矩阵的每个“行”,即:全局搜索 \[([^][]*)\],对于每个匹配项抓取组 1,这是行的内容,然后计算逗号的数量并比较所有计数(或者如果您确实需要数字,则使用您的语言的拆分操作对逗号进行拆分。)

PS: [^][] 是除开括号和闭括号外的所有字符的字符类。右括号需要是 ^ 之后的第一个字符,这是一种特殊情况。

关于regex - 在正则表达式中,当使用星号时,你可以让一些星号在重复的正则表达式中重复相同的次数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14743930/

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