- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用正则表达式解析这些字符串,但我认为我的正则表达式语句不正确。
我得到一个字符串,每当它有换行符和回车符时,它们必须分成两个字符串。字符串具有以下格式
[CharSize][Inverted][Aligned]Data
例如,如果我得到这样的数据
QString s1 = "[6][1][0]Data1\n\r[5][0][1]Data2";
当我将它们分开时,将有两个 QString,我将获取左括号和右括号内的数据。
另一个有效数据是这样的:
QString s2 = "[7][0][1]Data3"
无效数据是这样的:
QString s3 = "abc[8][1][1]Data4"
我在下面应用了以下 QRegExp:
QRegExp clrf("\n\r|\r\n|\n");
QStringList sp = str.split(clrf);
QRegexp clrf 可以很好地用换行符和回车符、反向或只是换行符来分隔数据。注意:这里s1、s2、s3处理的很好。
问题出在这里:
QRegExp value("[^a-z]?\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]([A-Za-z0-9\\'\\ \"]*)");
当我使用上面的代码时,s1、s2和s3都被处理了。 S3 不应 被处理,因为它的第一个字符不是左括号。你能帮我更正我的 QRegExp 吗?
谢谢。
编辑:完整代码:
void parseString(QString str)
{
QRegExp clrf("\n\r|\r\n|\n");
QRegExp value("\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]([A-Za-z0-9\\'\\ \"]*)");
// QRegExp value("^\[(\\d+)\]\[(\\d+)\]\[(\\d+)\](.*)$");
int p = 0, i = 0;
int res;
int cs = 0, inv = 0, al = 0;
QStringList sp = str.split(clrf);
XLineString ls;
for (i = 0; i < sp.size(); ++i) {
res = value.indexIn(sp[i], p);
while (res != -1) {
printf("Text=[%s]\n", value.cap(EData).toStdString().c_str());
printf("Digit cs[%d] ", value.cap(ECharSize).toInt());
printf("inv[%d] ", value.cap(EInvert).toInt());
printf("al[%d]\n", value.cap(EAlignment).toInt());
cs = value.cap(ECharSize).toInt();
if (value.cap(EInvert).toInt())
inv = 1;
else
inv = 0;
if (value.cap(EAlignment).toInt())
al = 1;
else
al = 0;
ls.addLine(value.cap(EData).toStdString().c_str(), cs, inv, al);
p += value.matchedLength();
res = value.indexIn(str, p);
}
}
}
int main()
{
QString str1[] = {
"[12][0][0]DATA1\n\r[78][0][1]DATA2",
"abc[1][1][1]THIS SHOULD NOT PASS",
};
for (int i = 0; i < sizeof(str1) / sizeof(str1[0]); ++i)
parseString(str1[i]);
}
最佳答案
为了回答您的问题,我已经使用 PyQt5 对此进行了测试(为简单起见)
import re
R = ["\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]\\[([0-9a-z]+)\\]([A-Za-z0-9\\'\\ \"]*)", "^\[(\\d+)\]\[(\\d+)\]\[(\\d+)\](.*)$"]
tests = ["[6][1][0]Data1\n\r[5][0][1]Data2", "[7][0][1]Data3", "abc[8][1][1]Data4"]
s = re.compile("\n\r|\r\n|\n") # emulate QRegExp split feature
for r in R:
r=QRegExp(r)
for T in tests:
for t in s.split(T):
print(r.indexIn(t))
结果:
0
0
0
3
0
0
0
-1
结论:如果您简单地测试“indexIn”等于 0 而不是不等于 -1,您的原始匹配也可以工作,而我的修改版本应该可以工作。
我认为最好的办法是简单地修改代码以确保索引等于 0。我可能还建议您使用 If 语句而不是 While 语句,否则您可能会重复匹配同一行。
关于c++ - QRegExp 仅解析以特定字符开头的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727135/
在我正在进行的项目中,我需要制作一个 QStringList在所有 QRegExp 中捕获其中 2 个的 except:第一个和另一个,取决于其他一些参数。 直接的方法是使用 QRegExp::cap
我对 QRegExp 类没有任何问题,但现在我有了一个。我的代码 QRegExp re("d class=\\.green\\.>([+,0-9]+)[.0-9]+[.0-9]++0.1069.769
我必须从qmake 项目文件中提取单行注释。规则很简单:注释以 # 符号开头,以换行符 \n 开头。所以我阅读了一些关于 QRegExp 的文档,并编写了这样的代码来打印 qmake 文件中的所有注释
我试图在回调函数中将字符串与 QRegExp 匹配。我正在使用 Qt 的 C++ 实现。我写了一个形式的正则表达式:Atmospheres.(\\d+).(latitude|longitude|rad
我正在开发一些 Qt 应用程序,其主窗口 由QPlainTextEdit 子类日志窗口 组成,用于输出事件。我有三种类型的消息: 信息消息,表示一个以[INFO]子串开头的QString 警告信息,表
我想将所有不包含这些字符“”、“=”的字符串与 QRegExp (Qt) 匹配。使用以下正则表达式,这是行不通的: "^[^>、=]).*$ 关于c++ - QRegExp 不符合预期,我们在Sta
我正在尝试使用正则表达式解析这些字符串,但我认为我的正则表达式语句不正确。 我得到一个字符串,每当它有换行符和回车符时,它们必须分成两个字符串。字符串具有以下格式 [CharSize][Inverte
我有一个由其他人制作的应用程序,我需要修复它。 View 上有一个图表和一个用于过滤图表的文本框,但过滤器不起作用。出于某种原因,QRegExp 找不到任何东西。 我正在使用 QT5.12.1 和 V
使用 Qt 框架的类,我们如何从字符串中删除换行符、回车符和多个空格。 输入: A quick fox run over the lazy dog 输出: A quick fox
我正在努力创建一个用于匹配字符串 (??) 的 QRegExp(即:一个左括号、两个问号和一个右括号,这应该是一个单独的词,所以在此之前和之后可以是空格、制表符、换行符),我想到的最接近的是 QReg
我正在尝试从此文本中提取“246”: Responsible: John Doe Number: 246 Date: 24-12-2005 使用 QRegExp,模式: (?:Number: )\d+
我正在解析一些字符串。如果我遇到类似“Foo(bar)”的东西,我想提取“Foo”和“bar” 如何使用 QRegExp 来实现? 最佳答案 首先,如果您使用的是 Qt 5,那么最好使用 QRegul
我有一个 QString“mystring”,它是从这个 shell 命令的返回值中捕获的: df /storage/sdcard0/ 捕获的字符串是: Filesystem
我有一个字符串。例如: QString myString = "Today is Tuesday"; 要求是:当用户键入一个字符串时,如果该字符串包含在myString中,那么myString中的那部
我正在为 QLineEdit 编写一个正则表达式检查器,我正在使用 QRegExp。 我已经写了一个 int 值检查器: QRegExp *expression_ = new QRegExp("^(0
我想像使用 QRegExp 一样过滤命令 /path/to/executable --long-parameter -s /path/which/has/a/space/and/a/dash/\ -e
我不知道如何使用 QRegExp。我正在尝试从 QString 中删除选定的字符,但不知道如何将其写为正则表达式,从未使用过这些字符 :( 我想删除所有换行符、回车符、|、¦、¶ 和 §。 谢谢 Ps
我的程序从命令行获取配置。命令行是这样的:“mapPath=Some_Path_Over_Here\npluginsPath=Other_Path_Over_Here\n”请注意中间和最后的“\n”。
我想知道/有一个 qregexp,它可以从一行中提取所有整数,但如果数字位于评论部分则停止提取 For Example { 20,100,0X0},/*this line contains 2
我需要验证在 qlineedit 中输入的文本是否具有正则表达式的形式,我尝试使用这个: void MainWindow::checkReg( QLineEdit& mail, const QChec
我是一名优秀的程序员,十分优秀!