正则表达式助手

330 浏览
31 试用
8 购买
Nov 18, 2025更新

根据指定匹配需求生成精准正则表达式,详细解释各组成部分,并提供示例文本与代码演示,帮助快速应用于文本匹配与数据处理场景。

以下为满足要求的 Python 正则表达式与用法示例。

一、推荐正则表达式(忽略大小写,全局匹配) 模式(单行版,便于复制): \b(?P[A-Za-z0-9_+]+(?:.[A-Za-z0-9_+]+)*)@(?P(?:A-Za-z0-9?.)+[A-Za-z]{2,24})\b

说明(逐段解析):

  • \b
    • 单词边界,帮助避免把紧邻的字母数字粘连到邮箱两侧(例如结尾中文标点、空格等不会被误包含)。
  • (?P ... )
    • 命名捕获组 local,用于捕获邮箱的本地部分(@ 前)。
    • [A-Za-z0-9_+]+(?:.[A-Za-z0-9_+]+)*:
      • 允许字母、数字、下划线、加号;
      • 点仅作为分段分隔符:段.段 的形式,避免首尾点和连续点,更贴近日常邮箱格式。
  • @
    • 字面含义的 at 符号。
  • (?P ... )
    • 命名捕获组 domain,用于捕获域名部分(@ 后)。
    • (?:A-Za-z0-9?.)+:
      • 支持多级子域;每个标签
        • 以字母或数字开头与结尾;
        • 中间可含连字符(-),但不允许以连字符开头或结尾;
        • 典型长度约束至多 63 字符(通过 {0,61} 实现)。
    • [A-Za-z]{2,24}:
      • 顶级域名,仅允许字母,长度 2–24。
  • \b
    • 另一侧单词边界,避免把域名后续的字母数字继续误并入匹配。

二、示例文本 团队联系方式:

三、Python 代码示例 功能:提取所有邮箱地址;打印每个匹配的 local 与 domain;按 domain 分组计数;输出去重后的邮箱列表与总数。

import re
from collections import Counter

text = """团队联系方式:
- 开发: dev.team+build@lab.example.org
- 客服: support_cn@help.example.net
- 招聘: hr@jobs.example.com
亦可写作备选: user.name_2025+news@sub.example.net,欢迎投递。"""

# 编译正则(忽略大小写,使用 VERBOSE 便于阅读)
pattern = re.compile(r"""
    \b
    (?P<local>[A-Za-z0-9_+]+(?:\.[A-Za-z0-9_+]+)*)     # 本地部分
    @
    (?P<domain>(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,24})  # 域名+TLD
    \b
""", re.IGNORECASE | re.VERBOSE)

# 1) 全局匹配并打印每个匹配的 local 与 domain
matches = list(pattern.finditer(text))
for m in matches:
    print(f"email={m.group(0)} | local={m.group('local')} | domain={m.group('domain')}")

# 2) 按域名分组计数(忽略大小写)
domain_counts = Counter(m.group('domain').lower() for m in matches)
print("\n按域名统计:")
for domain, count in domain_counts.most_common():
    print(f"{domain}: {count}")

# 3) 输出去重后的邮箱列表与总数(忽略大小写去重)
unique_emails = sorted({m.group(0).lower() for m in matches})
print("\n去重邮箱列表:")
for email in unique_emails:
    print(email)
print(f"总数: {len(unique_emails)}")

备注:

  • 使用 finditer 可实现“全局匹配”,并获取每个匹配的命名组 local 与 domain。
  • 去重与统计时使用 lower() 确保大小写不敏感。

以下给出一条适用于 Java 的正则表达式,以及其含义说明与完整示例代码(提取与脱敏)。

一、Java 正则表达式 (?<!\d)(?(?:25[0-5]|2[0-4]\d|1\d\d|0?\d{1,2})(?:.(?:25[0-5]|2[0-4]\d|1\d\d|0?\d{1,2})){3})(?::(?6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}))?(?!\d)

二、组成部分解释

  • (?<!\d)
    • 负向前瞻的固定长度“左边界保护”:左侧不能是数字,避免在更长数字串中将一部分识别成 IP。
  • (? ... )
    • 命名捕获组 ip,抓取完整 IPv4 地址。
    • 单个八位段(octet):(?:25[0-5]|2[0-4]\d|1\d\d|0?\d{1,2})
      • 25[0-5]:250–255
      • 2[0-4]\d:200–249
      • 1\d\d:100–199
      • 0?\d{1,2}:0–99,允许前导零,且总长度不超过 3 位(如 0、00、000、01、009、099 等均可)。
    • 拼装四段:octet(?:.octet){3}
  • (?::(? ... ))?
    • 可选端口,前置冒号:
    • 命名捕获组 port,严格限制范围 1–65535:
      • 6553[0-5]:65530–65535
      • 655[0-2]\d:65500–65529
      • 65[0-4]\d{2}:65000–65499
      • 6[0-4]\d{3}:60000–64999
      • [1-5]\d{4}:10000–59999
      • [1-9]\d{0,3}:1–9999
  • (?!\d)
    • 负向后瞻的固定长度“右边界保护”:右侧不能是数字,确保端口或 IP 末尾后面不是数字(防止被更长数字串吞并)。

三、示例文本 2025-11-18 10:21:05 INFO client=10.4.23.8:8080 status=200 2025-11-18 10:21:07 WARN client=192.168.0.12 status=403 2025-11-18 10:21:10 INFO client=172.16.5.100:443 action=CONNECT 边界测试:source=255.255.255.255:65535 完整通过

四、Java 代码示例

  • 目标:
    • 提取每行的 ip 与 port 命名捕获组,返回对象列表。
    • 生成一个新日志文本,将匹配到的 IP 脱敏为 [IP],端口原样保留(如 [IP]:8080)。

示例代码(可直接运行): import java.util.; import java.util.regex.;

public class IpPortExtractorAndMasker {

// 结果对象
static class ClientEndpoint {
    final String ip;
    final Integer port; // null 表示未出现端口
    final int lineNo;

    ClientEndpoint(String ip, Integer port, int lineNo) {
        this.ip = ip;
        this.port = port;
        this.lineNo = lineNo;
    }

    @Override
    public String toString() {
        return "ClientEndpoint{ip=" + ip +
               ", port=" + (port == null ? "null" : port) +
               ", line=" + lineNo + "}";
    }
}

public static void main(String[] args) {
    String text = String.join("\n",
        "2025-11-18 10:21:05 INFO client=10.4.23.8:8080 status=200",
        "2025-11-18 10:21:07 WARN client=192.168.0.12 status=403",
        "2025-11-18 10:21:10 INFO client=172.16.5.100:443 action=CONNECT",
        "边界测试:source=255.255.255.255:65535 完整通过"
    );

    String OCTET = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d{1,2})";
    String PORT  = "(?:6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3})";
    String REGEX = "(?<!\\d)(?<ip>(" + OCTET + ")(?:\\." + OCTET + "){3})(?::(?<port>" + PORT + "))?(?!\\d)";

    Pattern pattern = Pattern.compile(REGEX);

    // 1) 提取对象列表
    List<ClientEndpoint> endpoints = new ArrayList<>();
    String[] lines = text.split("\\R");
    for (int i = 0; i < lines.length; i++) {
        Matcher m = pattern.matcher(lines[i]);
        while (m.find()) {
            String ip = m.group("ip");
            String portStr = m.group("port");
            Integer port = (portStr == null) ? null : Integer.valueOf(portStr);
            endpoints.add(new ClientEndpoint(ip, port, i + 1));
        }
    }

    // 2) 生成脱敏日志(IP -> [IP],端口保留)
    Matcher m2 = pattern.matcher(text);
    StringBuffer masked = new StringBuffer();
    while (m2.find()) {
        String portStr = m2.group("port");
        String replacement = "[IP]" + (portStr != null ? ":" + portStr : "");
        m2.appendReplacement(masked, Matcher.quoteReplacement(replacement));
    }
    m2.appendTail(masked);

    // 输出结果
    System.out.println("提取结果:");
    for (ClientEndpoint e : endpoints) {
        System.out.println(e);
    }
    System.out.println("\n脱敏后的日志:");
    System.out.println(masked.toString());
}

}

说明

  • 使用命名捕获组 ip 与 port 来直接按名字读取字段:m.group("ip")、m.group("port")。
  • 使用 (?<!\d) 与 (?!\d) 保证匹配不嵌入到更长的数字串中(满足“避免匹配更长数字串的子串”的要求)。
  • 端口严格限制为 1–65535;IP 的每个八位段允许前导零(如 001、000、099 均可)。
  • 脱敏时用 appendReplacement/appendTail,并结合 Matcher.quoteReplacement,安全地构造替换串,将 IP 替换为 [IP] 并保留 “:端口”。

示例详情

解决的问题

帮助用户快速生成适用于特定场景的正则表达式,同时提供详细的讲解以便于理解,并结合示例代码展示其实用性,适用于广泛的技术开发与数据处理场景。

适用用户

开发者和程序员

快速生成适配特定开发环境的正则表达式,并且直接获取示例代码,免去反复调试的时间。

数据分析师

通过正则表达式对文本数据进行高效清洗、提取与格式化,提高数据处理效率。

非技术行业用户

无需掌握复杂的正则语法,也可以通过直观的提示生成符合需求的正则表达式。

特征总结

轻松生成精准正则表达式,快速解决文本匹配与提取问题,适应多种场景需求。
提供示例代码与详细讲解,让用户即使没有正则经验也能快速上手和理解。
支持多种语言与平台的代码展示,帮助开发者直接借用生成的代码。
针对不同使用场景定制正则表达式,确保满足特定业务需求。
自动分析示例文本,智能优化表达式,减少用户自行调试时间。
清晰解释正则表达式的每一部分,让用户不仅会用,更能学会。
覆盖多种正则风格(如Python、JavaScript等),适配用户常见开发环境。
提供场景化应用指导,结合具体任务展示正则如何解决实际问题。
参数化提示词输入,用户只需简单描述需求即可生成符合需求的表达式。
内置最佳实践与优化建议,提高正则表达式的可读性与执行效率。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥25.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 135 tokens
- 6 个可调节参数
{ 正则类型 } { 匹配模式描述 } { 示例文本 } { 可选说明 } { 编程语言 } { 具体任务 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59