Pandas 正则表达式提取给 re.search 不同的输出?
Pandas Regex extract giving different output to re.search?
所以,我正在尝试使用正则表达式从我的 pandas 数据框的列中提取权重值...预计由于某种原因,提取不正确。
all_data["name"].iloc[0] = "220 grams" # this is purely to show my issue
pattern = "[0-9]+ ?(gram|mg|Gram|GRAM)"
gram_values = all_data["name"].str.contains(pattern)
re.search(pattern, all_data["name"].iloc[0])
输出为
<re.Match object; span=(0, 8), match='220 gram'>
正如预测的那样,它正在出口 220 克。万岁。
现在,如果我使用 pandas.str.extract 方法...
all_data["name"].str.extract(pattern)
那么输出就是
相同的正则表达式模式,两个不同的输出。那我到底做错了什么?正则表达式字符串如何提取不同的值?
Pandas Series.str.extract()
behavior is explained in the documenation, it returns only the capturing group 内容。
pat : string
Regular expression pattern with capturing groups
您的正则表达式包含一个捕获组,(gram|mg|Gram|GRAM)
,因此它的内容被返回。
要使正则表达式在 Pandas str.extract
中工作,用捕获组包装它,并使另一个 group non-capturing:
r"([0-9]+ ?(?:gram|mg|Gram|GRAM))"
# | |non-capturing group||
# |_______ capturing group______|
所以,我正在尝试使用正则表达式从我的 pandas 数据框的列中提取权重值...预计由于某种原因,提取不正确。
all_data["name"].iloc[0] = "220 grams" # this is purely to show my issue
pattern = "[0-9]+ ?(gram|mg|Gram|GRAM)"
gram_values = all_data["name"].str.contains(pattern)
re.search(pattern, all_data["name"].iloc[0])
输出为
<re.Match object; span=(0, 8), match='220 gram'>
正如预测的那样,它正在出口 220 克。万岁。
现在,如果我使用 pandas.str.extract 方法...
all_data["name"].str.extract(pattern)
那么输出就是
相同的正则表达式模式,两个不同的输出。那我到底做错了什么?正则表达式字符串如何提取不同的值?
Pandas Series.str.extract()
behavior is explained in the documenation, it returns only the capturing group 内容。
pat : string
Regular expression pattern with capturing groups
您的正则表达式包含一个捕获组,(gram|mg|Gram|GRAM)
,因此它的内容被返回。
要使正则表达式在 Pandas str.extract
中工作,用捕获组包装它,并使另一个 group non-capturing:
r"([0-9]+ ?(?:gram|mg|Gram|GRAM))"
# | |non-capturing group||
# |_______ capturing group______|