不止热门角色,我们为你扩展了更多细分角色分类,覆盖职场提升、商业增长、内容创作、学习规划等多元场景。精准匹配不同目标,让每一次生成都更有方向、更高命中率。
立即探索更多角色分类,找到属于你的增长加速器。
以下为满足要求的 Python 正则表达式与用法示例。
一、推荐正则表达式(忽略大小写,全局匹配)
模式(单行版,便于复制):
\b(?P
说明(逐段解析):
二、示例文本 团队联系方式:
三、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)}")
备注:
以下给出一条适用于 Java 的正则表达式,以及其含义说明与完整示例代码(提取与脱敏)。
一、Java 正则表达式
(?<!\d)(?
二、组成部分解释
三、示例文本 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 代码示例
示例代码(可直接运行): 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());
}
}
说明
帮助用户快速生成适用于特定场景的正则表达式,同时提供详细的讲解以便于理解,并结合示例代码展示其实用性,适用于广泛的技术开发与数据处理场景。