regex re.search не возвращает совпадение - PullRequest
0 голосов
/ 05 апреля 2020

Я попробовал этот код:

x = re.search("f?e?males?\b", "russian male")

if (x):
    print("YES! We have a match!")
else:
    print("No match")

НО это печатает "Нет совпадения".

Я тестирую, чтобы применить его к фрейму данных. Если в строке есть «male», она должна вернуть другое значение.

Но регулярное выражение не работает. Ты знаешь почему? Я не хочу ставить только «мужской», потому что я хочу также соответствовать женскому, женскому, мужскому и др. c.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020

Используйте префикс r при написании паттернов. т.е. r'f? e? males \ b '

Необработанные строки странно взаимодействуют. Более подробную информацию можно найти в верхнем ответе здесь -> Python регулярное выражение - префикс r

0 голосов
/ 05 апреля 2020

Кажется, проблема в \ b-части вашего регулярного выражения. Я думаю, что вы хотите посмотреть здесь: x = re.search(r"f?e?males?(?!\S)", "russian male") Это соответствует "русский мужчина", "русский мужчина", "русский мужчина", но не "русский мужчина" или "русский мужчина!"

О, и как другие 2 ответа указали: вам нужно r перед вашим регулярным выражением:)

0 голосов
/ 05 апреля 2020

Добавьте 'r' перед регулярным выражением: x = re.search(r"f?e?males?\b", "russian male"), потому что у вашего регулярного выражения есть '\' в строке. См. Операции с регулярными выражениями :

Регулярные выражения используют символ backsla sh ('\'), чтобы указать специальные формы или разрешить использование специальных символов без вызова их специальных смысл. Это противоречит использованию Python одного и того же символа для той же цели в строковых литералах; например, чтобы соответствовать литералу backsla sh, может потребоваться написать '\\' в качестве строки шаблона, потому что регулярное выражение должно быть \, а каждый backsla sh должен быть выражен как \ внутри регулярного Python строковый литерал. Кроме того, обратите внимание, что любые недопустимые escape-последовательности в использовании Python символа backsla sh в строковых литералах теперь генерируют DeprecationWarning и в будущем это станет SyntaxError. Такое поведение произойдет, даже если это допустимая escape-последовательность для регулярного выражения.

Решение состоит в том, чтобы использовать необработанную строковую нотацию Python для шаблонов регулярных выражений; обратная косая черта не обрабатывается особым образом в строковом литерале с префиксом 'r'. Таким образом, r "\ n" - это двухсимвольная строка, содержащая '\' и 'n', а "\ n" - это односимвольная строка, содержащая символ новой строки. Обычно шаблоны будут выражаться в Python коде с использованием этой необработанной строковой записи.

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