gpt4 book ai didi

regex - 正则表达式捕获不需要的字符串

转载 作者:行者123 更新时间:2023-12-04 04:50:39 25 4
gpt4 key购买 nike

我创建了以下表达式:(.NET regex 引擎)

((-|\+)?\w+(\^\.?\d+)?)

hello , hello^.555,hello^111, -hello,+hello, hello+, hello^.25, hello^-1212121

它运作良好,除了:
  • 它捕获术语 'hello+' 但没有 '+' :根本不应该捕获该组
  • 最后一项 'hello^-1212121' 作为 2 组 'hello' 和 '-1212121' 都应该被忽略

  • 要捕获的字符串如下:
  • 单词前面可以有 + 或 -
  • 或 word 可以有一个 ^ 后跟一个正数(不一定是整数)
  • 单词由逗号和任意数量的空格分隔(两者都不是捕获的一部分)

  • 要捕获的有效字符串的一些示例:
  • 你好^2
  • 你好^.2
  • +你好
  • -你好
  • 你好

  • 编辑

    我发现以下表达式可以有效地捕获所有这些术语,它并没有真正优化,但它只是有效:
    ([a-zA-Z]+(?= ?,))|((-|\+)[a-zA-Z]+(?=,))|([a-zA-Z]+\^\.?\d+)

    最佳答案

    好的,这里有一些问题需要解决:

    ((-|+)?\w+(\^.?\d+)?)
    ^ ^
    +.应该像这样逃脱:
    ((-|\+)?\w+(\^\.?\d+)?)

    现在,您还将获得 -1212121那里。如果您的字符串 hello总是字母,那么你会改变 \w[a-zA-Z] :
    ((-|\+)?[a-zA-Z]+(\^\.?\d+)?)
    \w包括字母、数字和下划线。因此,您可能希望将其限制为仅字母。

    最后,要考虑到完全没有捕获的组,您必须使用环视。我不知道无论如何要在不妨碍比赛的情况下到达分隔符:
    (?<=^|,)\s*((-|\+)?[a-zA-Z]+(\^\.?\d+)?)\s*(?=,|$)

    编辑:如果它不能像 -hello^2 , 如果另一个有效字符串是 hello^9.8 ,那么这个会更适合:
    (?<=^|,)\s*((?:-|\+)?[a-zA-Z]+|[a-zA-Z]+\^(?:\d+)?\.?\d+)(?=\s*(?:,|$))

    最后,如果捕获单词就足够了,我们可以删除环视:
    ([-+]?[a-zA-Z]+|[a-zA-Z]+\^(?:\d+)?\.?\d+)

    关于regex - 正则表达式捕获不需要的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496110/

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