gpt4 book ai didi

regex - 捕获多个文本。

转载 作者:行者123 更新时间:2023-12-04 06:18:52 28 4
gpt4 key购买 nike

我有正则表达式的问题。

考虑我们有一个字符串

 S= "[sometext1],[sometext],[sometext]....,[sometext]"

“sometexts”的数量未知,它是用户的输入,可以从 1 到 ..例如,1000。

[sometext] 是一些字符序列,但每个字符都不是“,”,所以,我们可以说 [^,]。

我想通过一些正则表达式捕获文本,然后循环遍历文本。
QRegExp p=new QRegExp("???");
p.exactMatch(S);
for(int i=1;i<=p.captureCount;i++)
{
SomeFunction(p.cap(i));
}

例如,如果 sometexts 的数量是 3,我们可以使用这样的东西:
([^,]*),([^,]*),([^,]*).

所以,我不知道该写什么来代替“???”对于任意的 n。
我正在使用 Qt 4.7,我没有在类引用页面上找到如何做到这一点。
我知道我们可以在没有正则表达式的情况下通过循环来完成它,或者在循环中生成正则表达式本身,但是这些解决方案不适合我,因为实际问题比这更复杂一些..

最佳答案

匹配您想要的可能的正则表达式是:

([^,]+?)(,|$)

这将匹配以逗号“,”或行尾结尾的字符串。我不确定最后一个元素是否会昏迷。

在 C# 中使用此正则表达式的示例:
String textFromFile = "[sometext1],[sometext2],[sometext3],[sometext4]";

foreach (Match match in Regex.Matches(textFromFile, "([^,]+?)(,|$)"))
{
String placeHolder = match.Groups[1].Value;

System.Console.WriteLine(placeHolder);
}

此代码将以下内容打印到屏幕上:
[sometext1]
[sometext2]
[sometext3]
[sometext4]

使用我在网上找到的 QRegex 示例是尝试更接近您正在寻找的解决方案:
(我发现的例子是: http://doc.qt.nokia.com/qq/qq01-seriously-weird-qregexp.html )
QRegExp rx( "([^,]+?)(,|$)");
rx.setMinimal( TRUE ); // this is if the Qregex does not understand the +? non-greedy notation.

int pos = 0;
while ( (pos = rx.search(text, pos)) != -1 )
{
someFunction(rx.cap(1));
}

我希望这有帮助。

关于regex - 捕获多个文本。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865838/

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