我已经看到这个问题的变体问了一百万遍,但是不知何故无法为自己找到解决方案。
( PIN 700W_start_stop( STS_PROP( POS_X 1233 )( POS_Y 456 )( BIT_CNT 1 )( CNCT_ID 7071869 ))(USR_PROP( VAR 1( Var_typ -1 )(AssocCd H12 )( termLBLttt +S)( Anorm 011.1)(Amax 1.0))
如何提取“ POS_X”后面的数字?即1233 我以为使用正则表达式可以解决这个问题,因为它看起来非常简单。但这不起作用(如图)。
import re
import pandas as pd
df_pin = pd.DataFrame(columns =
['ID','Pos_x','Pos_y','conn_ID','Association_Code','Anorm','Amax'])
with open(r'C:\Users\user1\Documents\Python Scripts\test1.txt', 'r',
encoding="ISO-8859-1") as txt:
for line in txt:
data = txt.read()
line = line.strip()
x = re.search(r'POS_X (\d+)', data)
df_pin = df_pin.append({'POS_X' : x, ignore_index = True}
print (x)
这不应该给我'POS_X'之后的数字,然后将其附加到我的数据框中吗?同一行上可能存在多次“ POS_X ###”,我只想查找第一个。如果我想对“ PIN”进行同样的操作并提取“ 700W_start_stop”怎么办?
答案 0 :(得分:2)
re.search()
返回一个MatchObject
对象。 \d+
与正则表达式中的第一个捕获组匹配,因此您需要使用
if x:
print(x.group(1))
else:
print("POS_X not found")
打印出来。
整个循环应为:
import re
with open(r'C:\Users\user1\Documents\Python Scripts\test1.txt', 'r', encoding="ISO-8859-1") as txt:
for line in txt:
line = line.strip()
x = re.search(r'POS_X (\d+)', line)
if x:
print(x.group(1))
else:
print("POS_X not found in", line)
对于PIN
,您可以使用:
x = re.search(r'PIN (\w+)')
\w
匹配字母数字字符和_
。