Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从dataframe列中搜索匹配的字符串模式_Python_Regex_String_Pandas - Fatal编程技术网

在python中从dataframe列中搜索匹配的字符串模式

在python中从dataframe列中搜索匹配的字符串模式,python,regex,string,pandas,Python,Regex,String,Pandas,我有一个如下所示的数据框 name genre satya |ACTION|DRAMA|IC| satya |COMEDY|BIOPIC|SOCIAL| abc |CLASSICAL| xyz |ROMANCE|ACTION|DARMA| def |DISCOVERY|SPORT|COMEDY|IC| ghj |IC| 现在我想查询数据帧,以便获得第1、5和6行。即,我想查找单独使用或与其

我有一个如下所示的数据框

 name         genre
 satya      |ACTION|DRAMA|IC|
 satya      |COMEDY|BIOPIC|SOCIAL|
 abc        |CLASSICAL|
 xyz        |ROMANCE|ACTION|DARMA|
 def        |DISCOVERY|SPORT|COMEDY|IC|
 ghj        |IC|
现在我想查询数据帧,以便获得第1、5和6行。即,我想查找单独使用或与其他类型的任何组合使用的| IC |

到目前为止,我可以使用

df[df['genre'] == '|ACTION|DRAMA|IC|']  ######exact value yields row 1
或字符串包含搜索依据

 df[df['genre'].str.contains('IC')]  ####yields row 1,2,3,5,6
 # as BIOPIC has IC in that same for CLASSICAL also
但我不想要这两个

#df[df['genre'].str.contains('|IC|')]  #### row 6
# This also not satisfying my need as i am missing rows 1 and 5
因此,我的要求是找到包含| IC |的类型(我的字符串搜索失败,因为python将|视为or运算符)


有人建议使用一些reg或任何方法来实现这一点。谢谢你的建议。

我认为你可以将
\
添加到regex中进行转义,因为没有
\
被解释为:

|

A | B,其中A和B可以是任意的REs,创建一个与A或B匹配的正则表达式。任意数量的REs可以通过这种方式用“|”分隔。这也可以在组内使用(见下文)。扫描目标字符串时,从左到右尝试用“|”分隔的REs。当一个模式完全匹配时,该分支被接受。这意味着一旦A匹配,B将不会被进一步测试,即使它将产生更长的整体匹配。换句话说,“|”操作符从来都不是贪婪的。要匹配文字“|”,请使用\|,或将其括在字符类中,如[|]中所示


可能是这种结构:

    pd.DataFrame[DataFrame['columnName'].str.contains(re.compile('regex_pattern'))]
    pd.DataFrame[DataFrame['columnName'].str.contains(re.compile('regex_pattern'))]