2016-09-17 3 views
-1

У меня есть файл, который имеет следующий вход:Почему это регулярное выражение не соответствует строке с символом процента?

xa%1bc 
ba%1bc 
. 
. 

и так далее. Я хочу использовать match и regex, чтобы идентифицировать линии, в которых есть a%1b. Я использую

import re 
p1 = re.compile(r'\ba%1b\b', flags=re.I) 
if re.match(p1,linefromfile): 
    continue 

Это не кажется, что обнаружить линию с 1%. В чем проблема? Благодаря

+6

вопрос является '\ b' вокруг рисунка. Это означает «граница слов», поэтому это не соответствует ни одному из ваших примеров. Кроме того, вам не нужно регулярное выражение, чтобы просто проверить подстроку. –

+2

Есть несколько проблем. Сначала вы должны просто [использовать 'in'] (http://stackoverflow.com/questions/5319922/python-check-if-word-is-in-a-string). Во-вторых, вы проверяете границы слов, где их нет. В-третьих, вы смотрите только на начало строки с 'match', когда [вам нужно« искать »для поиска во всей строке] (http://stackoverflow.com/questions/14933771/python-regular-expression-re -match-почему-это-кода делает-не-работа). – TigerhawkT3

ответ

0

Вы можете попробовать

if 'a%1b' in linefromfile: 

ИЛИ

, если вам нужно регулярное выражение

if re.match('a%1b', linefromfile): 
1

match искать только образец в начале строки, если вы хотите найти если строка содержит шаблон, вместо этого используйте search. Кроме того, вам не нужны границы слова, \b:

re.search (шаблон, строка, флаги = 0)

сканирование через строку в поисках первое место, где регулярное выражение производит и вернуть соответствующий объект соответствия. Возврат Нет, если нет позиция в строке соответствует шаблону; обратите внимание, что это отличается от поиска нулевой длины в какой-то момент в строке .

re.match (шаблон, строка, флаги = 0)

Если ноль или более символов в начале строки соответствует шаблону регулярного выражения, возвращает соответствующий объект матч. Возврат Нет, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.

import re 
if re.search(r"a%1b", "xa%1bc"): 
    print("hello") 
# hello 
Смежные вопросы