这是我的Dataframe:
entityId delta_approved_clockout
(ID: 10) 247333605 0.0
(ID: 20) 36738870 0.0
(ID: 40) 4668036427 0.0
(ID: 50) 1918647972 0.0
(ID: 60) 4323165902 44125.0
(ID: 80) 145512255 0.0
Assigned (ID: 30) 42050340 0.0
Assigned (ID: 40) 130880371376 0.0
Assigning (ID: 30) 1095844753 0.0
Cancelled (ID: 40) 937280 0.0
Cancelled (ID: 80) 16857720813 0.0
Planned (ID: 20) 9060392597 0.0
Planning (ID: 10) 108484297031 0.0
Processed (ID: 70) 133289880880 0.0
Revoked (ID: 50) 2411903072 0.0
Writing (ID: 50) 146408550024 0.0
Written (ID: 60) 139458227923 1018230.0
我希望结果只打印'(ID:10)'的完全正则表达式匹配,使用此行我的输入包括' Planning(ID:10)',这不是我需要的完全匹配。这些是总结的结果:
entityId delta_approved_clockout
last_status
(ID: 10) 247333605 0.0
Planning (ID: 10) 108484297031 0.0
print input_data[input_data['last_status'].str.contains(r'(?<!\S)\(ID: 10\)(?!\S)', na=False)]
我还尝试过使用0结果的正则表达式代码,例如:
print input_data[input_data['last_status'].str.contains(r' ^(\(ID: \d+\))$', na=False)]
print input_data[input_data['last_status'].str.contains(r'^(\(ID: 10\))$', na=False)]
也许我不能完全理解正则表达式,写正则表达式的正确方法是什么?提前谢谢。
答案 0 :(得分:1)
如果您想获得整行,可以将正则表达式更新为^\s*\(ID: 10\).*$
要捕获群组中的(ID: 10)
,您可以尝试^\s*(\(ID:\s*10\)).*$
答案 1 :(得分:1)
您可以使用
r'^\s*\(ID:\s*\d+\)\s*$'
模式匹配:
^
- 字符串开头\s*
- 零个或多个(*
)空白字符\(ID:
- (ID:
子字符串\s*
- 零个或多个(*
)空白字符\d+
- 1+位数\)
- )
字符\s*
- 零个或多个(*
)空白字符$
- 字符串结束。答案 2 :(得分:1)
正则表达式:^\s*\(ID:\s10\)[^\r\n]+
详细说明:
^
在行的开头断言位置\s
匹配任何空格字符*
零和无限时间之间的匹配[^]
匹配列表中不存在的单个字符+
在一个时间和无限时间之间匹配\r\n
匹配回车符和换行符(换行符)Python代码:
dataframe = """ (ID: 20) 247333605 0.0
(ID: 50) 36738870 0.0
(ID: 40) 4668036427 0.0
(ID: 50) 1918647972 0.0
(ID: 60) 4323165902 44125.0
(ID: 10) 145512255 0.0
Assigned (ID: 30) 42050340 0.0
Assigned (ID: 40) 130880371376 0.0
Assigning (ID: 30) 1095844753 0.0
Cancelled (ID: 40) 937280 0.0
Cancelled (ID: 80) 16857720813 0.0
Planned (ID: 20) 9060392597 0.0
Planning (ID: 10) 108484297031 0.0
Processed (ID: 70) 133289880880 0.0
Revoked (ID: 50) 2411903072 0.0
Writing (ID: 50) 146408550024 0.0
Written (ID: 60) 139458227923 1018230.0 """
def ID(id, data):
return re.findall(r'^\s*\(ID:\s%s\)[^\r\n]+' % id, data, re.MULTILINE)
ID(10, dataframe) >> [' (ID: 10) 145512255 0.0 ']
答案 3 :(得分:0)
这应该有效:
input_data = input_data[(input_data['last_status'] == '(ID: 10)')]