gpt4 book ai didi

regex - 通过正则表达式限制文本中的行数

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

在我知道的任何编程语言中如何有效地限制给定文件或字符串中的行数,这不是这里的问题。但是在这种情况下,我希望通过正则表达式来做到这一点。在此模式中,我仅使用 \n 换行符。 我不需要其他字符,例如 \r 回车符.

(?:(?:\n)?[^\n]*){0,3}

上面的正则表达式解释:

(?:       group, but do not capture (between 0 and 3 times)-
(?: group, but do not capture (optional)
\n '\n' (newline)
)? end of grouping
[^\n]* any character except: '\n' (newline) (0 or more times)
){0,3} end of grouping

现在在字符串中使用这个正则表达式,例如..

In this line is foo bar and baz
In this line is bar and foo
In this line is baz and bar
In this line we have foo
In this line we have bar and foo and baz
In this line we have foobar
In this line we have foo
In this line we have foo and bar
In this line we have bar and baz and foo

这将毫无问题地返回 1-3 行。

在上面的字符串中,行 789 都包含单词 foo all by本身无论是在字符串的开头、中间还是结尾。

现在我的问题是,我如何实现向前看或向后看以搜索字符串并在一行中找到 3 行文本,它们都具有相同的关键字 foo 本身而不是作为一个词的前缀或组合在另一个词中?因此它只会匹配行 7-9 而不是 1-6

最佳答案

我不明白为什么这需要任何类型的 lookaround .只匹配包含 foo:

的行
(?:\n?[^\n]*foo[^\n]*){3}

请注意,使用可选的 \n 这可能会匹配包含 foo 三次的行。为避免这种情况,请使用

(?:(?:^|\n)[^\n]*foo[^\n]*){3}
// or
(?:[^\n]*foo[^\n]*(?:\n|$)){3}

(根据您的正则表达式风格,您可能会使用不同的 anchors 作为字符串的开头/结尾)


如果您需要独立的foo,只需添加word boundaries对它:

(?:\n?[^\n]*\bfoo\b[^\n]*){3}

关于regex - 通过正则表达式限制文本中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730361/

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