【问题标题】:Regex expression to match strings after example codes正则表达式匹配示例代码后的字符串
【发布时间】:2021-09-01 13:59:31
【问题描述】:

您好,我正在尝试使用正则表达式的代码示例后的正则表达式与示例文本匹配文本。

(?<=H\d\d\d)([.*\w\W\n]+)(?=End word)

https://regex101.com/r/9SBnH9/2

Sample text
Sample text
Sample text
H319 asdkjczixuqweoiurqoiweqwrjasdkjfqwe qweiouqwroiu kjasdkj czkjxklqjwekjiouasdiiaosudou
oiuasodiucxzlkjqweoiu oqiwur H320 asdkqjwe askjdq xzc
H325 asjdhasjd zxcjh
H331+H341+H341 askdjvkjzx qweqrqwoe
End word
Sample text
Sample text

这是示例文本,我希望表达式在找到 H** 代码后开始搜索匹配项,并且仅在再次找到 H** 代码时才获取文本,忽略它并获取文本并以 H**+H**+H** 或 @ 为例987654327@,但同样的交易跳过H 代码并仅获取文本。并搜索直到找到End word。我已经到了它从第一个 H 代码开始的地步,但随后它获取了所有字符串和结束词,您可以在我发送的正则表达式站点中看到它。

我应该得到这个结果:

asdkjczixuqweoiurqoiweqwrjasdkjfqwe qweiouqwroiu kjasdkj czkjxklqjwekjiouasdiiaosudou oiuasodiucxzlkjqweoiu oqiwur.asdkqjwe askjdq xzc.asjdhasjd zxcjh.askdjvkjzx qweqrqwoe

【问题讨论】:

    标签: regex vb.net regex-lookarounds


    【解决方案1】:

    您可以匹配所有不直接跟在H 和3 位数字之间的字符,并在字符串开头的右侧断言End word。

    (?<=H\d{3}\b)(?:(?!\+?H\d{3}\b)[\S\s])+(?=[\s\S]*\r?\nEnd word\b)
    

    部分模式匹配:

    • (?&lt;=H\d{3}\b) 正向后视,断言H 和左边的 3 位数字。单词边界\b 防止部分匹配
    • (?:非捕获组
      • (?!\+?H\d{3}\b)[\S\s] 匹配 1 次以上未直接后跟可选 + 然后 H 和 3 位数字的任何字符(包括换行符)
    • )+关闭非捕获组并重复1次以上
    • (?= 正向前瞻,向右断言
      • [\s\S]*\r?\nEnd word\b 匹配字符串开头的End word(如果^不在开头,则省略)
    • ) 关闭前瞻

    Regex demo

    如果您也不想交叉匹配 End word,您可以将其添加到否定前瞻中:

    (?<=H\d{3}\b)(?:(?!\+?H\d{3}\b|^End word\b)[\S\s])+(?=[\s\S]*\r?\nEnd word\b)
    

    Regex demo

    【讨论】:

    • 您好,我对此进行了测试,但我只得到了第一个 H** 代码文本,但没有得到其余部分。
    • @Swapx 你是如何使用代码的?您是否启用了多行标志?
    • 当我在正则表达式生成器上测试它时,它显示所有正确,但是当我在自动化(UiPath)中使用它时,它只需要第一行。
    • @Swapx 试试这个(?m)(?&lt;=H\d{3}\b)(?:(?!\+?H\d{3}\b|^End word\b)[\S\s])+(?=[\s\S]*\r?\nEnd word\b) 或(?m)(?&lt;=H\d{3}\b)(?:(?!\+?H\d{3}\b|^End word\b)[\S\s])+(?=[\s\S]*\bEnd word\b)
    • 我认为这是因为当我尝试在类型为 IEnumerable 的变量中输出文本时,当我将其放入写入行活动中时,我输入了我的变量(0).Value.ToString为什么它只需要第一行,因为 vb 从 0 开始,但是如果我删除这个 0 怎么让它打印整个错误。
    【解决方案2】:

    我会使用这个正则表达式:

    (?<=H\d{3}\b)(?!\+H\d{3})\s*([\w\W]+?)\s*(?=H\d{3}\b|End word)
    

    查看演示 here

    请注意,[.*\w\W\n] 是多余的 w.r.t。只是[\w\W],因为后者匹配任何是或不是单词字符的字符(因此,任何字符),所以它已经包含句点、星号和换行符。

    【讨论】:

    • 您好,我对此进行了测试,但我只得到了第一个 H** 代码文本,而不是其余的。
    • 当我在正则表达式生成器上测试它时,它显示所有正确,但是当我在自动化(UiPath)中使用它时,它只需要第一行。
    • 如果你想跳过文本的某些部分而只获得一个完整的匹配,我认为你不能这样做。通常,您使用global mode 来获得多个匹配项,然后您立即加入它们。
    • 没有正则表达式很好我认为我在匹配后打印数据的方式是错误的,因为我只打印第一行,但不确定如何打印整个文本,就像我只打印第一场比赛。
    • 如何加入他们?并拥有一个输出?
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多