[英]Python: String match is not working with regular expression
我们正在尝试从其值严格包含以下值之一的列中提取行[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 行,而是返回所有行。 我们不明白为什么它是错误的。
我会做
import pandas as pd
df = pd.DataFrame({"col":['TC1','TC2','TC3','TC12','TC15','TC16']})
print(df[df["col"].str.match(r"^TC\d$")])
output
col
0 TC1
1 TC2
2 TC3
说明:我使用^
和$
表示开始和结束,所以它只会检测哪里有完全匹配,即所谓的原始字符串,所以我可以在其中使用\d
而无需额外的 escaping (有关更多信息,请参阅re docs )。 作为旁注"TC[1,2,3]"
并没有按照你的想法做 - 如果你在[
]
中枚举字符,则没有要使用的分隔符,所以,
被视为字符,所以
import re
if(re.match("TC[1,2,3]", "TC,")):
print("match")
else:
print("no match")
output
match
您可以使用 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 re
df = df[df.Col_3.apply(lambda x : re.match(r'^TC[\d{1}]$', x)).notna()]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.