1 回答
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.')
添加回答
举报