Найдите цифры (или символы) после определенного слова в строке - PullRequest
0 голосов
/ 27 февраля 2019

Я видел варианты этого вопроса, задаваемые миллион раз, но почему-то не могу найти решение для себя.

( 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»?

1 Ответ

0 голосов
/ 27 февраля 2019

re.search() возвращает объект MatchObject.\d+ соответствует первой группе захвата в регулярном выражении, поэтому вам нужно использовать

if x:
    print(x.group(1))
else:
    print("POS_X not found")

, чтобы напечатать это.

DEMO

Весь цикл должен быть:

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 соответствует буквенно-цифровым символам и _.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...