gpt4 book ai didi

用于匹配单词的正则表达式,除非前一行以单词结尾

转载 作者:行者123 更新时间:2023-12-01 12:18:55 25 4
gpt4 key购买 nike

我有一个包含许多句子的文本,由换行符和任意空格分隔:

Some thing.
Some other text.
Some line.
Some additional text.
Some stuff.
Some additional text.
Some additional text.

我如何只匹配那些 Some词,其中上一行不以 thing 结尾或 stuff ?

对于上面的例子,我会匹配这些词:
Some thing.           
Some other text. <-- skip, previous line ends with "thing."
[Some] line.
[Some] additional text.
[Some] stuff.
Some additional text. <-- skip, previous line ends with "stuff."
[Some] additional text.

我试过 (?<!thing\.|stuff\.)[\r\n\s]+Some ,但我不知道如何在负回顾中包含空格+换行符?我找到了一些使用 \K 的例子允许“可变长度”匹配,但我显然不明白 \K根本没有,因为我无法匹配任何东西。

最佳答案

您可以使用“sacrificial match” ' 使用非捕获组来匹配您不想要的内容,然后允许在捕获组中匹配您想要的内容:

/(?:^\s*Some.*(?:thing\.|stuff\.)\s*^\s*Some)|(^\s*Some)/m

Demo

或者,如果您想要第一个和第四个(如评论中所述,您的示例不一致......)
/(?:(?:thing\.|stuff\.)\s*Some)|(^\s*Some)/m

Demo

或者,跳过第一个 Some并包括第四个:
/(?:(?:thing\.|stuff\.)\s*Some)|((?<=\n)\s*Some)/m

Demo

此方法适用于大多数正则表达式风格。

在这种情况下,负向后视是一个问题,因为后视需要固定宽度。 \s*你描述的不是固定宽度。

关于用于匹配单词的正则表达式,除非前一行以单词结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002130/

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