为了账号安全,请及时绑定邮箱和手机立即绑定

python中等效的正则表达式是什么?

python中等效的正则表达式是什么?

四季花海 2021-09-11 13:40:05
PHP中的代码<?php    $str = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in.";    preg_match("/([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)/", $str, $org_arr);    echo $org_arr[0];   ?>输出CSIR-国家植物研究所此正则表达式从给定的 PHP 字符串中提取医院、大学、研究所、学校、学院或学院。我尝试在 python 中执行相同的正则表达式,但它不起作用。Python 中的代码import reline = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in."match = re.search(r'/([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)/', line)print(match.group(0))给出错误信息回溯(最近一次调用最后一次):文件“C:\Users\Ghost Rider\Documents\Python\temp.py”,第 4 行,在 print(match.group(0)) AttributeError: 'NoneType' object has no attribute '团体'
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

编辑:

不错的附加细节。您在 None 类型上遇到错误,因为该模式不匹配任何内容;展示如何检查比解释更容易......


所以让我们稍微改变一下你的例子,看看这是否符合你的要求。请注意模式上缺少前导和尾随斜线(请参阅下面的原文)。


import re

txt = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in."

# note: str is the string class type, python would happily let you assign that to a string literal.

print('txt={}'.format(txt))

pattern = r'([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)'

m = re.search(pattern, txt)

if m:

    print('found some things, groups={}'.format(m.groups()))

else:

    print('no match')

结果:


txt=CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in.

found some things, groups=('Research ', 'Institute')

我认为PHP 中的$org_arr部分是在 Python 的m.groups()列表中设置的。


原来的:

也许在没有前导和尾随斜杠的情况下在 python 中尝试一下?让我们从制作一个简单的模式开始......


PHP 示例

这些PHP 文档显示了这个例子:


// The "i" after the pattern delimiter indicates a case-insensitive search

if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {

    echo "A match was found.";

} else {

    echo "A match was not found.";

}

由于他们只是在php上搜索,所以斜线看起来像模式分隔符。


python中的相同示例

在 Python 中就是这样(不是模式是 r'php',不是 r'/php/')。


import re

if re.match( r'php', 'PHP is the web scripting language of choice.', re.IGNORECASE):

    print('A match was found.')

else:

    print('A match was not found.')

保留匹配对象稍微有用一点,这样你就可以使用你的组......


import re

m = re.match( r'(php)', 'PHP is the web scripting language of choice.', re.IGNORECASE)

if m:

    print('A match was found, group(1)={}'.format(m.group(1)))

else:

    print('A match was not found.')


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信