почему регулярное выражение не соответствует тексту? - PullRequest
1 голос
/ 22 марта 2020

У меня есть регулярное выражение.

Pay a\s(.+)\sunit loan with %(.+)\sinterest and\s(.+)\spayments from\s(.+)\sto\s(.+)\s\.

, и я пытаюсь сопоставить его с:

Заплатить кредит на 50 единиц с процентом 17% и 12 выплатами от мелли до мики настоящий кака.

Но они не совпадают. Почему так? и есть ли у вас решение?

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Ну, вы не правы, потому что шаблон соответствует строке, но не целому.

Ваше недоразумение заключается в конце шаблона: to\s(.+)\s. соответствует:

to - буквально to

\s - пробел, пробел в вашей строке

(.+) - 1+ любых символов, насколько это возможно ( жадный), поэтому он соответствует mika the real

\s - снова пробел, соответствует пробелу

. - любой символ (только один), соответствует k

См. demo .

Если вы пропустите последний \s, он будет соответствовать всей строке. Рабочий пример .

1 голос
/ 22 марта 2020

Он не (полностью) совпадает, потому что вы ищете пробел, за которым следует любой символ, кроме пробела (\s.), поэтому на этом все и заканчивается. Вам нужно экранировать точку, чтобы действительно ее найти - \s.+\. (ищите пробел, за которым следует любой символ, а затем точка). Пример

Pay a\s(.+)\sunit loan with %(.+)\sinterest and\s(.+)\spayments from\s(.+)\sto\s(.+)\s.+\.

Но независимо от этого - вы уже сопоставляете все после последнего пробела - так что \s. в конце регулярного выражения является избыточным.

Просто удалите \s. из конца регулярного выражения ( Пример )

Pay a\s(.+)\sunit loan with %(.+)\sinterest and\s(.+)\spayments from\s(.+)\sto\s(.+)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...