Python中这个正则表达式该怎么写?

有如下两种格式的信息,想提取名称和地址信息:

1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路
供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路

如果这样写正则:供应商名称\s*:\s*(.{,30})\s*\d?.?法人.{,40}?地址:\s(\S+)
对于第一种格式的结果会是:肇 庆市锐装有限公司 2、

如果 ?能优先从 1 次而非 0 次开始匹配就好了
Python中这个正则表达式该怎么写?

15 回复

不用正则……直接按值分隔,然后按数组取搞定了……

一个问题用正则,现在你有两个问题了


import re

# 匹配邮箱地址的正则表达式
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'

# 测试数据
test_emails = [
    "user@example.com",
    "hello.world@sub.domain.co.uk",
    "invalid-email@",
    "test@localhost",
    "name+tag@gmail.com"
]

# 验证每个测试邮箱
for email in test_emails:
    if re.match(email_pattern, email):
        print(f"✅ 有效: {email}")
    else:
        print(f"❌ 无效: {email}")

# 如果要提取文本中的所有邮箱
text = "联系我:admin@site.com 或 support@company.org,无效的:bad@email"
found_emails = re.findall(email_pattern, text)
print(f"\n从文本中提取到的邮箱: {found_emails}")

正则表达式分解:

  • ^$ 确保匹配整个字符串
  • [a-zA-Z0-9._%+-]+ 匹配用户名部分(字母、数字、点、下划线等)
  • @ 匹配@符号
  • [a-zA-Z0-9.-]+ 匹配域名部分
  • \. 匹配点(需要转义)
  • [a-zA-Z]{2,} 匹配顶级域名(至少2个字母)

如果你要匹配其他模式(比如手机号、URL等),告诉我具体需求。

正则表达式要根据你的实际需求来写。

var_dump(explode(’:’,$str));

? 确实是优先匹配 1 而不是 0。只要让 * 优先匹配更少的次数即可,方法是把 * 换为 *?

/名称:(.+?) .地址:(.)/
如果 “肇 庆市锐装有限公司” 里面没有空格的话

String regex = "供应商名称\s*:\s*(.{0,30}\D)(\s2?)\s*\d?.?法人.{0,40}?地址:\s(\S+) ";

也可以这样,
tring regex = "供应商名称\s*:\s*(.{0,30}\s)(2?)\s*\d?.?法人.{0,40}?地址:\s(\S+) ";
给 .{0,30} 一个 2 之前的结束标志就好了,就可以将 “肇 庆市锐装有限公司” 放在一个组里面。

I thought I was in sf.gg.

我觉得 先用正则 \d*、把序列编号用空格代替了之后用:和空格 kv 分割 比较方便啊。。

把空格标点数字全删了按几个标题字符断一下

得用环视吧
(?<=供应商名称:).+(?=2、)|(?<=2、).+(?=3、)|(?<=3、地址:).+

改一下
(?<=供应商名称:).+(?=2、)|(?<=2、法人 :).+(?=3、)|(?<=3、地址:).+

In [25]: s1 = '1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路 ‘

In [26]: s2 = ‘供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路’

In [27]: pat = re.compile(r’(?:\d、)?供应商名称:(\D+)(?:\d、)?法人 :.+地址:(.+)$’)

In [28]: pat.search(s1).groups()
Out[28]: ('肇 庆市锐装有限公司 ', ’ 肇庆市梅庵路 ')

In [29]: pat.search(s2).groups()
Out[29]: ('肇 庆市锐装有限公司 ‘, ’ 肇庆市梅庵路’)

> import re
s1 = '1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路 '
s2 = ‘供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路 ‘

recom = re.compile(r’(?<=供应商名称:)(?P<company>[^ ]* ?[^ ]).(?<=法人 : )(?P<owner>[^ ]).(?<=地址: )(?P<addr>[^ ]).’)
print(recom.findall(s1))
print(recom.findall(s2))

##############
[(‘肇 庆市锐装有限公司’, ‘郑均’, ‘肇庆市梅庵路’)]
[(‘肇 庆市锐装有限公司’, ‘郑均’, ‘肇庆市梅庵路’)]

回到顶部