[英]Finding exact regex match for string in column
這是我的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)]
也許我不完全理解正則表達式,寫正則表達式的正確方法是什么? 提前致謝。
如果你想獲得整行,你可以將你的正則表達式更新為^\\s*\\(ID: 10\\).*$
要在組中捕獲(ID: 10)
,您可以嘗試^\\s*(\\(ID:\\s*10\\)).*$
你可以用
r'^\s*\(ID:\s*\d+\)\s*$'
請參閱正則表達式演示 。
模式匹配:
^
- 字符串的開頭 \\s*
- 零個或多個( *
)空格字符 \\(ID:
- a (ID:
substring \\s*
- 零個或多個( *
)空格字符 \\d+
- 1+位數 \\)
- a )
char \\s*
- 零個或多個( *
)空格字符 $
- 結束字符串。 正則表達式 : ^\\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 ']
這應該工作:
input_data = input_data[(input_data['last_status'] == '(ID: 10)')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.