Python:字符串匹配不适用于正则表达式
我们试图从一个列中提取行,该列的值严格包含以下值之一Python:字符串匹配不适用于正则表达式,python,dataframe,Python,Dataframe,我们试图从一个列中提取行,该列的值严格包含以下值之一[TC1、TC2、TC3]。诀窍是某些行还包含以下值TC12、TC13等。我们不想提取它们。这里不允许使用str.contains Col_1 Col_2 Col_3 1 A TC1 2 B TC2 3 C TC3 4 D TC12 5 D TC15 6 D TC16 Col_1 Col_2 Col_3 1 A TC1
[TC1、TC2、TC3]
。诀窍是某些行还包含以下值TC12、TC13
等。我们不想提取它们。这里不允许使用str.contains
Col_1 Col_2 Col_3
1 A TC1
2 B TC2
3 C TC3
4 D TC12
5 D TC15
6 D TC16
Col_1 Col_2 Col_3
1 A TC1
2 B TC2
3 C TC3
我们使用了以下命令:
df1 = df.loc[df1['Col_3'].str.match("TC\d{1}")]
df1 = df.loc[df1['Col_3'].str.match("TC[1-3]{1}")]
df1 = df.loc[df1['Col_3'].str.match("TC[1,2,3]")]
但问题是这不起作用。它不是返回前3行,而是返回所有行。我们不明白为什么它是错误的。您可以使用str.contains-
df = df[df.Col_3.str.contains(pat = r'^TC[\d{1}]$')]
或者通过str.match-
df = df[df.Col_3.str.match(pat = r'^TC[\d{1}]$')]
或者通过str.fullmatch-
df = df[df.Col_3.str.fullmatch(pat = r'^TC[\d{1}]')]
或通过应用(慢速)-
我愿意
import pandas as pd
df = pd.DataFrame({"col":['TC1','TC2','TC3','TC12','TC15','TC16']})
print(df[df["col"].str.match(r"^TC\d$")])
输出
col
0 TC1
1 TC2
2 TC3
match
说明:我使用了表示开始和结束的^
和$
,因此它将只检测存在完全匹配的所谓原始字符串的位置,这样我就可以在其中使用\d
,而无需额外转义(有关更多信息,请参阅)。作为旁注,“TC[1,2,3]”
并不是你想的那样-如果你在[
]
中枚举字符,就没有可以使用的分隔符,所以,
被视为字符,所以
import re
if(re.match("TC[1,2,3]", "TC,")):
print("match")
else:
print("no match")
输出
col
0 TC1
1 TC2
2 TC3
match
这回答了你的问题吗?您也可以使用
.fullmatch()
df[“col”].str.fullmatch(r“TC\d”)
将不需要^
和$
,尽管它们本质上是相同的。OP特别提到str.contains
不是一个选项(尽管如果使用^
和$
),ProblemsLoop更新了我的答案