Python正则表达式搜索和计数与符号字符

时间:2015-06-21 11:22:01

标签: python regex string

我尝试用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",如何提取数字?因为我需要这个号码。

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代码\bword boundary匹配 - 也就是说,如果一个侧有“单词字符”并且其他方面没有。字符@不是单词字符(它不会与\w匹配),因此您的正则表达式期望类似abc@sosiora(单词字符 left @)。

通过从正则表达式中删除左\b来修复它。