![](/img/trans.png)
[英]How get all matches using str.contains in python regex?
[英]using str.contains() in python, when it matches string perfectly and still not getting output
我正在使用 str.contains() 从我的 dataframe 中搜索电影名称并且没有得到 output,但是当我有部分字符串时,它会正确给出 output。 我想要的是如何使这个代码片段在部分和完整的字符串匹配中都能正常工作。
在部分字符串上使用包含,如果我在 minList 中只使用“(第 1 卷)”,我会得到正确的 output 或下面显示的那个
minList = ['Star Wars: Clone Wars']
for k in minList:
print(df[df.name.str.contains(k,case=False,na=False)]["name"])
3208星球大战:克隆人战争(第一卷)名称:名称,dtype:object
在完整字符串上使用包含
minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
print(df[df.name.str.contains(k,case=False,na=False)]["name"])
并且没有 output
系列([],名称:名称,dtype:对象)
也尝试使用查询()
minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
print(df.query('name.str.contains("' + k + '")',engine='python')['name'])
但没有 output
系列([],名称:名称,dtype:对象)
将参数regex=False
添加到str.contains()
调用。
str.contains()
默认将第一个参数作为正则表达式(正则表达式)。 所以括号被视为正则表达式符号并且不匹配括号字面意思。
data = {'name': ['Star Wars: Clone Wars (Volume 1)', 'Other strings']}
df = pd.DataFrame(data)
print(df)
Output:
name
0 Star Wars: Clone Wars (Volume 1)
1 Other strings
minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
print(df[df.name.str.contains(k,case=False,na=False, regex=False)]["name"])
Output: # String extracted successully.
0 Star Wars: Clone Wars (Volume 1)
Name: name, dtype: object
如果要将字符串与regex=True
匹配,则需要将作为第一个参数传递的字符串修改为:
minList = [r'Star Wars: Clone Wars \(Volume 1\)']
minList = [r'Star Wars: Clone Wars \(Volume 1\)']
for k in minList:
print(df[df.name.str.contains(k,case=False,na=False)]["name"])
Output: # String matched successfully
0 Star Wars: Clone Wars (Volume 1)
Name: name, dtype: object
在这里,我们使用\(
而不是只是(
和\)
而不是只是)
。 我们还使用原始字符串r'....'
来引用整个字符串,这样我们就不需要对被视为正则表达式的字符串使用双斜杠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.