QRegExp 类详细介绍

QRegExp 是 PyQt5(Qt 框架)中用于处理正则表达式的类,提供字符串匹配、搜索和替换功能,常用于输入验证、文本处理等场景。以下是详细介绍及常用方法:

一、核心功能

  • 正则表达式匹配:验证字符串是否符合指定模式。
  • 字符串搜索:查找子串的匹配位置。
  • 文本替换:替换符合模式的字符串片段。
  • 捕获组:提取匹配的子表达式内容。

 

二、构造函数

python

from PyQt5.QtCore import QRegExp

# 创建正则表达式对象
regex = QRegExp(pattern, case_sensitive=True, syntax=QRegExp.RegExp)
参数 说明
pattern 正则表达式字符串(如 "\\d+" 表示数字)
case_sensitive 是否区分大小写(默认 True
syntax 正则表达式语法类型(默认 QRegExp.RegExp

语法类型枚举值

  • QRegExp.RegExp:标准正则语法(默认)
  • QRegExp.Wildcard:通配符模式(如 *.txt
  • QRegExp.FixedString:字面匹配(禁用正则元字符)

三、常用方法

1. 匹配验证
方法 说明 示例
exactMatch(str) -> bool 检查字符串是否完全匹配 regex.exactMatch("123") → True
indexIn(str, offset=0) -> int 返回匹配的起始位置(-1 表示无匹配) regex.indexIn("a1b2") → 1
2. 捕获组操作
方法 说明 示例
capturedTexts() -> List[str] 返回所有捕获组内容 ["2023", "23"]
cap(n=0) -> str 返回第 n 个捕获组(0 表示全匹配) regex.cap(1) → "23"
3. 表达式配置
方法 说明
setPattern(pattern) 设置正则表达式
pattern() -> str 获取当前表达式
setCaseSensitivity(cs) 设置是否区分大小写
caseSensitivity() -> bool 返回是否区分大小写

四、代码示例

1. 验证邮箱格式

python

from PyQt5.QtCore import QRegExp

def validate_email(email):
    regex = QRegExp(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
    return regex.exactMatch(email)

print(validate_email("[email protected]"))  # True
print(validate_email("invalid.email"))    # False
2. 搜索并提取日期

python

text = "会议时间:2023-10-05 至 2023-10-10"
regex = QRegExp(r"(\d{4})-(\d{2})-(\d{2})")

pos = 0
while (pos := regex.indexIn(text, pos)) != -1:
    print(f"找到日期: {regex.cap(0)}")
    print(f"年: {regex.cap(1)}, 月: {regex.cap(2)}, 日: {regex.cap(3)}")
    pos += regex.matchedLength()

# 输出:
# 找到日期: 2023-10-05
# 年: 2023, 月: 10, 日: 05
# 找到日期: 2023-10-10
# 年: 2023, 月: 10, 日: 10
3. 与 QLineEdit 结合(输入验证)​

python

from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QRegExpValidator

app = QApplication([])

# 创建输入框并设置验证器(仅允许数字)
line_edit = QLineEdit()
regex = QRegExp(r"\d+")
validator = QRegExpValidator(regex)
line_edit.setValidator(validator)

line_edit.show()
app.exec_()

五、正则表达式语法速查

模式 说明
\d 匹配数字(等价于 [0-9]
\w 匹配字母、数字或下划线(等价于 [A-Za-z0-9_]
^ 匹配字符串开头
$ 匹配字符串结尾
* 匹配前一个字符 0 次或多次
+ 匹配前一个字符 1 次或多次
{n} 匹配前一个字符恰好 n 次
[a-z] 匹配任意小写字母

六、注意事项

  1. 转义字符
    在 Python 字符串中,正则表达式的反斜杠需转义(如 \\d 表示 \d)。

  2. 性能优化
    频繁使用的正则表达式建议预编译(通过 QRegExp 对象复用)。

  3. 新版本替代
    Qt 6 开始推荐使用 QRegularExpression(PyQt6 中同理),但 PyQt5 仍以 QRegExp 为主。


通过 QRegExp,可以轻松实现复杂的文本匹配逻辑,结合 PyQt5 控件构建强大的输入验证和数据处理功能!

你可能感兴趣的:(#,PyQt5.QtCore,qt,开发语言,python)