我尝试用python制作一些脚本来查找和计算字符串中的单词。一个词是" @ sosiora",我找到了一些例子,但它找不到" @ sosiora"但是" sosiora"。这是我的剧本
#!/usr/bin/python
import re
words = ["@sosiora"]
exactMatch = re.compile(r'\b%s\b' % '\\b|\\b'.join(words), flags=re.IGNORECASE)
print len(exactMatch.findall("@riky ini adalah @sosiora dengan huruf s "))
我不知道,但它总是打印0.请帮助我,我是Python的新手。谢谢
额外: 我现在编辑了我的代码,但我又发现了一些问题。如果找到它们,如何提取单词?这是我现在的代码
#!/usr/bin/python
import re
words = ["@sosiora","@sosiora#1","@sosiora#2","@sosiora#3","@sosiora#4","@sosiora#5"]
exactMatch = re.compile('|'.join(words), flags=re.IGNORECASE)
print len(exactMatch.findall("@riky ini adalah @Sosiora#1 dengan huruf s "))
如果我发现" @ sosiora#1"或" @ sosiora#2",如何提取数字?因为我需要这个号码。
答案 0 :(得分:2)
你正在编译的正则表达式是错误的...这应该更好:
#!/usr/bin/python
import re
words = ["(@sosiora#(\d+))"]
exactMatch = re.compile('|'.join(words), flags=re.IGNORECASE)
text = "@riky ini adalah @Sosiora#1 dengan huruf s"
m = exactMatch.findall(text)
print 'Found %d matches' % len(m)
print 'First word found: ' + m[0][0] # @Sosiora#1
print 'First index found: ' + m[0][1] # 1
答案 1 :(得分:1)
它与Python无关;你的正则表达本身是错误的。
GREP代码\b
与word boundary匹配 - 也就是说,如果一个侧有“单词字符”并且其他方面没有。字符@
不是单词字符(它不会与\w
匹配),因此您的正则表达式期望类似abc@sosiora
(单词字符 left @)。
通过从正则表达式中删除左\b
来修复它。