В Python регулярном выражении, как мне сопоставить только подстроки facebook.com...777, заданные любой строкой? Я не хочу, чтобы ?sfnsn=mo в конце. У меня (?<=https://m\.)([^\s]+) соответствовало всему после https://m.. У меня также есть (?=\?sfnsn), чтобы сопоставить все, что перед ?sfnsn.
facebook.com...777
?sfnsn=mo
(?<=https://m\.)([^\s]+)
https://m.
(?=\?sfnsn)
?sfnsn
Как мне объединить регулярное выражение, чтобы вернуть только часть facebook.com ... 777 для любой строки.
иметь: https://m.facebook.com/story.php?story_fbid=123456789&id=7777777777?sfnsn=mo хочу: facebook.com/story.php?story_fbid=123456789&id=7777777777
https://m.facebook.com/story.php?story_fbid=123456789&id=7777777777?sfnsn=mo
facebook.com/story.php?story_fbid=123456789&id=7777777777
иметь: https://m.facebook.com/story.php?story_fbid=123456789&id=7777777777 хочу: facebook.com/story.php?story_fbid=123456789&id=7777777777
https://m.facebook.com/story.php?story_fbid=123456789&id=7777777777
Вот с чем я возился с https://regex101.com/r/WYz5dn/2
(?<=https://m\.)([^\s]+)(?=\?sfnsn)
Вы можете использовать группу захвата вместо положительного просмотра назад и сопоставить либо ?sfnsn, либо конец строки.
https://m\.(\S*?)(?:\?sfnsn|$)
Regex demo
Используя поисковые пути, шаблон может быть:
(?<=https://m\.)\S*?(?=\?sfnsn|$)
Добавление ? в конце работает, поскольку последний сгруппированный просмотр вперед может существовать, а может и не существовать, мы ставим после него знак вопроса:
?
(?<=https://m\.)([^\s]+)(?=\?sfnsn)?