2017-02-01 3 views
1

Мне нужно извлечь имена пользователей и идентификаторы из очень большого файла. Я использую python 2.7. Мне нужно распечатать все, что приходит после имени пользователя = или prId = и с кавычками "".python regex pattern matching

Вход:

1. username="null null” 
2. username="test" 
3. username="test name" 
4. username="<unknown>" 
5. prId="tokenKeyUser" 

Ниже должен быть согласован:

null null 
test 
test name 
<unknown> 
tokenKeyUser 

В настоящее время я делаю ниже:

re.search(r'username="(.*?)"', line) 
re.search(r'prId="(.*?)"', line) 

Это в состоянии найти все шаблоны, кроме линия 1 и строка 5.

Это не в состоянии найти: 1. «нуль нуль» 2. „tokenKeyUser“

Что я делаю неправильно здесь

+4

Строка 1, похоже, имеет смарт-цитату, заканчивающую указанную подстроку. – DavidO

+2

В первой строке я вижу два разных символа '' 'и' '' – furas

+0

... и второй соответствует мне. Невозможно воспроизвести ошибку совпадения. – DavidO

ответ

0

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

username="(.*?)["”]|prId="(.*?)" 

группа 1 будет соответствовать имени пользователя и группы 2 будет соответствовать ИУП

+1

Символ '|' внутри '' [character class] 'неверно. Это говорит движку regex соответствовать символу' '' или символу '' 'или' ''. Символ '|' рассматривается как буквальный символ в классах символов, а не как метасимвол чередования. Классы символов - это неявно односимвольные чередования. – DavidO

+1

Спасибо, я отредактировал ответ. – Matts

0
for line in file: 
    for m in re.finditer(r'((?<=username=)|(?<=prId=))"([^"]+)["”]', line): 
    print(m.group(0)) 

null null” 
"test" 
"test name" 
"<unknown>" 
"tokenKeyUser" 

Я думал, что я бы предложил подход для точного вывода.