我正在使用 Qt 4.6 编写一个程序,我需要从表达式中捕获所有出现的非范围文字,例如
"SUM(A1:A3)+B1-B3+SUM(D1:D3)/COUNT(D1:D3)"
,
即 B1、B3,但不是 A1、A3、D1、D3。我尝试使用 QRegExp,但它不支持负后向断言,因此我无法排除 A3、D3 等文字。
我的正则表达式 (?<!:)([A-Z]{1,4}[1-9]\\d{0,3})(?!:)
不起作用。
我需要你的意见。谢谢。
最佳答案
根据您的情况,您可以使用
(?:^|[^:])\b([A-Z]{1,4}[1-9]\d{0,3})\b(?!:)
第一组匹配开头的空字符串或除冒号之外的任何字符。我还添加了单词边界 \b
,以便模式不会匹配 A4a
等内容。
通常,编写“积极”模式会更简单。例如,使用
(...)(:...)?
使用 ...
表示匹配单元格引用的 [A-Z]
模式,您可以一次性匹配范围和非范围,然后在循环时丢弃所有范围超过结果。您可以通过检查第二个捕获组是否为空来轻松检测匹配是否为范围。
关于c++ - 如何在 Qt 正则表达式中模拟负向后断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407022/