2016-09-10 3 views
1

Я пытаюсь найти выражение «K другие» в предложении «Крис и 34K другие»Python регулярное выражение. Найти предложение в предложении

Я попытался с регулярным выражением, но он не работает :(

import re 


value = "Chris and 34K others" 

m = re.search("(.K.others.)", value) 

if m: 
    print "it is true" 
else: 
    print "it is not" 
+0

Использовать '(K.others)' для регулярных выражений? – Li357

+0

're.match()' vs 're.search()'? .. – alecxe

+0

re.search() Мне нужно найти субтитр «K others» –

ответ

3

Угадайте, что вы - веб-страница соскабливания «вам и 34k другим понравилось это на Facebook», и вы завершаете «K others» в группе захвата, я сразу же перейду к тому, как получить номер:

import re 

value = "Chris and 34K others blah blah" 

# regex describes 
# a leading space, one or more characters (to catch punctuation) 
# , and optional space, trailing 'K others' in any capitalisation 
m = re.search("\s(\w+?)\s*K others", value, re.IGNORECASE) 

if m: 
    captured_values = m.groups() 
    print "Number of others:", captured_values[0], "K" 
else: 
    print "it is not" 

Try this code on repl.it

Это должен также включать верхний регистр/нижний регистр K, число с запятыми (1,100K человека), пробелами между числом и K, и работой, если есть текст после того, как «другие» или если нет.

2

вы должны использовать search, а не match, если вы не ожидаете, что ваш регулярное выражение совпадало с самого начала. помощь строка для re.match упоминает, что шаблон применяется в начале строки.

+1

, но он не работает :( –

+0

Последний символ '.' В вашем шаблоне не соответствует чему-либо в вашей тестовой строке. –

2

Если вы хотите, чтобы соответствовать что-то withi n шнур, используйте re.search. re.match начинается с начала. Также измените свой RegEx на: (K.others), последние . руины RegEx, поскольку после этого ничего не происходит, а первый . соответствует любому персонажу раньше. Я удалил те:

>>> bool(re.search("(K.others)", "Chris and 34K others")) 
True 

В RegEx (K.others) матчи:

Chris and 34K others 
      ^^^^^^^^ 

Противоположность (.K.others.), который не совпадает ни с чем. Вы можете использовать (.K.others) как хорошо, что соответствует символу перед:

Chris and 34K others 
      ^^^^^^^^^  

Кроме того, вы можете использовать \s бежать пространство и соответствовать только пробельные символы: (K\sothers). Это будет буквально соответствовать K, символу пробела и другим.

Теперь, если вы хотите соответствовать всем предыдущим и последующим, попробуйте: (.+)?(K\sothers)(\s.+)?. Вот ссылка на repl.it. Вы можете получить номер с this.

+0

, но это также верно Крис и 34Mds другие f. Мне нужно, чтобы там было « K others Я пробовал это, но он все еще не идеален m = re.search ('. K others $ |.', like) –

+0

Вы можете использовать '(K \ sothers)' @AnnaK, который будет соответствовать только «K другим» '. – Li357

+0

Спасибо :) не могли бы вы написать мне, пожалуйста, как определить, что это может быть что-то после того, как с тобой? (K \ sothers \.| $), что он соответствует «hhdsd 34K others a», но также «hhdsd 34K others» Спасибо :) –

Смежные вопросы