Python 在交互中通过正则表达式传递变量

Python 在交互中通过正则表达式传递变量,python,regex,Python,Regex,我试图通过正则表达式函数传递一个变量,但没有得到预期的结果 我尝试了以下代码,但它没有打印任何正则表达式结果: w = ["the small ball","the ball small","small the ball","small ball the","ball the small", "sball smalls the"] y = ["the", "small", "ball"] for j in y: for i in w: item = j p

我试图通过正则表达式函数传递一个变量,但没有得到预期的结果

我尝试了以下代码,但它没有打印任何正则表达式结果:

w = ["the small ball","the ball small","small the ball","small ball the","ball the small", "sball smalls the"]
y = ["the", "small", "ball"]
for j in y:
    for i in w:
        item = j
        print(item)
        try:
            m = re.search(r"%s\w+" %item, i)
            print(m.string)
        except Exception:
            pass
对于列表y中的每个项目,我希望它返回列表w中的所有项目,但最后一次迭代除外,因为ball不在字符串中某个单词的开头。然而,我并没有得到任何结果。相反,在删除异常处理后,我得到以下错误:

AttributeError:“非类型”对象没有属性“字符串”

预期成果:

the
the small ball
the
the ball small
the
small the ball
the
small ball the
the
ball the small
the
sball smalls the

small
the small ball
small
the ball small
small
small the ball
small
small ball the
small
ball the small
small
sball smalls the

ball
the small ball
ball
the ball small
ball
small the ball
ball
small ball the
ball
ball the small
ball

它应该根据所有列表w项搜索列表y的每个实例。如果列表y中的单词包含在列表w中任何单词的开头,则返回列表w元素。因此,ball的最后一次迭代不返回值,因为它不包含在sball small中任何单词的开头,而其他迭代则返回值,因为它们生成了匹配项


您能建议如何调整我的代码以获得预期的结果吗?

首先是关于例外情况:正如文档所说:

re.searchpattern,字符串,标志=0

扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的MatchObject实例。如果字符串中没有与模式匹配的位置,则返回None;请注意,这与在字符串中的某个点查找零长度匹配不同

因此,如果没有找到您搜索的表达式,您将在这里得到None,而不是m中的匹配对象。在这种情况下,m没有属性。而不是

 print(m.string)
试一试

如果文本后跟任何单词字符,则正则表达式匹配。这是可以的,即使比赛开始在一个词的中间。

如果要检查匹配是否以单词开头,可以在开头使用单词边界特殊序列“\b”,即:

   m = re.search(r"\b%s" %item, i)

已更新预期结果是否使用\s或\W而不是\W\w是[a-zA-Z0-9_]的简写,在这里我尝试了你的建议,但仍然得到了相同的结果这产生了与以前相同的结果。无论是传递错误,还是按照您建议的方式处理None值,它仍然不能帮助regex函数提供正确的结果。啊,我跳过了regex应该做什么。也添加了这个?它应该再次搜索列表y的每个实例所有列表w项。如果列表y中的单词包含在列表w中任何单词的开头,则返回列表w元素。因此,ball的最后一次迭代不返回任何值,因为它不包含在sball smalls中任何单词的开头,而其他迭代包含一个值,因为它们生成了匹配项。用这些细节更新了问题。OK,我希望添加到我答案中的正则表达式能够完成此任务。当我用这个表达式进行测试时,除了w中的最后一个字符串外,我得到了所有字符串的搜索命中率。
   m = re.search(r"\b%s" %item, i)