簡體   English   中英

在列中查找字符串的精確正則表達式匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM