Python正则表达式。在一个句子中查找一个句子

时间:2016-09-10 18:34:40

标签: python regex python-2.7

我试图在“克里斯和34K其他人”这句话中找到一个表达“K others”的表达方式

我尝试使用正则表达式,但它不起作用:(

import re


value = "Chris and 34K others"

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

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

3 个答案:

答案 0 :(得分: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之间的空格,如果有'其他'之后有文字或没有,则可以工作。

答案 1 :(得分:2)

除非您希望正则表达式在开头匹配,否则您应该使用search而不是matchre.match的帮助字符串提到该模式应用于字符串的开头。

答案 2 :(得分:2)

如果您想在字符串中匹配中的内容,请使用re.searchre.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获取号码。