Извлеките соответствующую подстроку в строке python

#python #regex

Вопрос:

Я пытаюсь извлечь подстроку из большой строки, которая соответствует моему шаблону.

 text = 'This is a large subsring. bla bla bla AND www.dumbweb.com/Dumbo and www.otherLinks.com...'

pattern = 'dumbweb.com'
 

здесь я пытаюсь найти строку, которая соответствует pattern

 theLink = re.findall(pattern, text)
print(theLink)  //output: dumbweb.com
 

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

желаемый результат:

 theLink //www.dumbweb.com/Dumbo
 

я устал искать подобный вопрос, но я не могу сформулировать его правильно, я даже посмотрел регулярное выражение Python, все еще не в состоянии достичь того, что я ищу.

Комментарии:

1. Вы буквально упомянули разделение по пространству, так что попробуйте: print([k for k in text.split() if 'dumbweb.com' in k])

Ответ №1:

Вы можете рассмотреть такой подход:

 import re
text = 'This is a large subsring. bla bla bla AND www.dumbweb.com/Dumbo and www.otherLinks.com...'
pattern = 'dumbweb.com'

rex = re.compile(r'b'   r'S*'   re.escape(pattern)   r'S*')
print (rex.findall(text))
 

Выход:

 ['dumbweb.com/Dumbo']
 

Объяснение:

  • re.compile(...) : компилирует заданный шаблон строкового регулярного выражения
  • r'b' : Граница слов
  • r'S*' : Сопоставьте 0 или более символов без пробелов
  • re.escape(pattern) : Выполните экранирование регулярного выражения данной строки
  • r'S*' : Сопоставьте 0 или более символов без пробелов

Ответ №2:

Вы могли бы попробовать это:

 [^ ]*dumbweb.com[^ ]*
 

Обратите внимание, что в регулярном выражении a . соответствует любому символу. Вам нужно использовать . , чтобы соответствовать только буквальному периоду

Ответ №3:

Попробуйте это:

 re.search('dumbweb.com[S]*', text).group() 
# matches your string followed by any character but white space 
 

Ответ №4:

Вероятно, не самое чистое решение:

 text = 'This is a large subsring. bla bla bla AND www.dumbweb.com/Dumbo and www.otherLinks.com...'

pattern = 'dumbweb.com'

for word in text.split():
    if word.find(pattern) > 0:
        print(word) 

Ответ №5:

Ваш шаблон должен быть

 pattern = "www.dumbweb.com[^\s]*"
 

Это приведет к печати ссылки, начиная с www.dumbweb.com пока не останется свободного места

Комментарии:

1. Это также будет соответствовать wwwwdumbweb$com

2. не могли бы вы, пожалуйста, проверить мой новый ответ, все ли в порядке?