我试图在“克里斯和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"
答案 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"
这也应该包括大写/小写K,带逗号的数字(1,100K人),数字和K之间的空格,如果有'其他'之后有文字或没有,则可以工作。
答案 1 :(得分:2)
除非您希望正则表达式在开头匹配,否则您应该使用search
而不是match
。 re.match
的帮助字符串提到该模式应用于字符串的开头。
答案 2 :(得分:2)
如果您想在字符串中匹配中的内容,请使用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获取号码。