Выход из форвардслы sh в текстовой строке regex python - PullRequest
0 голосов
/ 18 февраля 2020

Попытка получить числовое значение, и он появляется впереди sh вместе со второй границей слова, если я столкнулся с некоторыми проблемами. Любая помощь будет принята с благодарностью.

Это происходит из текстового файла, и он должен вернуть около ста или около того значений в список, поэтому он должен быть динамическим c

#Here is the text of interest, I am trying to obtain just the numerical value of 268
Average Price/Square Foot\n$268

#I've tried these different methods for escaping the backslash but they are not working
avg_sqft_price = re.findall(r'\bAverage Price\W/\bSquare Foot\n$268\n\$(d\*)',data)
avg_sqft_price = re.findall(r'\bAverage Price[\b]/\bSquare Foot\n$268\n\$(d\*)',data)
avg_sqft_price = re.findall(r'\bAverage Price\B/\bSquare Foot\n$268\n\$(d\*)',data)
avg_sqft_price = re.findall(r'\bAverage Price\/\bSquare Foot\n$268\n\$(d\*)',data)

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Форвард / - это просто форвард /, у него нет указания c, означающего re, и бежать нечего. Проблема в том, что вы пытаетесь сопоставить вещи дважды:

\bAverage Price\W/\bSquare Foot\n$268\n\$(d\*)

\W уже будет соответствовать /, поэтому вы пытаетесь сопоставить его дважды, затем вы подходите $268 однако, в отличие от /, $ - это метасимвол регулярного выражения (соответствует концу строки / концу строки), поэтому вам do необходимо выйти из него, а затем вы ' мы пытаемся снова сопоставить за исключением того, что вместо \ $ \ d + вы сопоставляете литерал $ (это хорошо), литерал d и литерал *. Поскольку последнее повторяется в всех ваших попытках, ничто не может сработать, независимо от того, какой беспорядок вы делаете с более ранними битами.

Также все ваши \b в значительной степени бесполезны, хотя и находятся в наименее безвредный. Это не \B, так как вы пытаетесь сопоставить несловую границу прямо на очень явной границе слова.

Average Price/Square Foot\n\$(\d+), кажется, то, что вы ищете: https://regex101.com/r/NyuTh7/2

0 голосов
/ 18 февраля 2020

Forward sla sh не является метасимволом регулярных выражений и поэтому не требует какой-либо специальной обработки. Я бы использовал этот подход:

inp = "Average Price/Square Foot\n$268"
num = re.findall(r'\bAverage Price/Square Foot\s*?\$(\d+)\b', inp)[0]
print(num)

Это печатает 268.

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