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

带符号字符的Python正则表达式搜索和计数,python,regex,string,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("@ri

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

您正在编译的正则表达式是错误的。。。这应该更好地发挥作用:

#!/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

你正在编译的正则表达式是错误的。。。这应该更好地发挥作用:

#!/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

它与Python无关;你的正则表达式本身是错误的

GREP代码
\b
匹配a–也就是说,如果一侧有“单词字符”,而另一侧没有,它将匹配。字符
@
不是单词字符(它与
\w
不匹配),因此您的正则表达式需要类似
abc@sosiora
(在
@
左边有一个单词字符)


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

它与Python无关;你的正则表达式本身是错误的

GREP代码
\b
匹配a–也就是说,如果一侧有“单词字符”,而另一侧没有,它将匹配。字符
@
不是单词字符(它与
\w
不匹配),因此您的正则表达式需要类似
abc@sosiora
(在
@
左边有一个单词字符)


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

不客气。请考虑接受答案。哦,是的……但如何使它不敏感?很快我会的,我现在不能接受答案,我要等5分钟,编辑我的答案。。。只需像以前一样添加IGNORECASE标志。现在我又发现了一些问题。如何从字符串中提取单词?我的意思是像“sosiora”1或“sosiora”2。如何提取数字?findall方法返回匹配单词的列表,因此如果您这样做:m=exactMatch.findall(@riky ini adalah@sosiora dengan huruf s)),那么m将是匹配单词的列表。欢迎使用。请考虑接受答案。哦,是的……但如何使它不敏感?很快我会的,我现在不能接受答案,我要等5分钟,编辑我的答案。。。只需像以前一样添加IGNORECASE标志。现在我又发现了一些问题。如何从字符串中提取单词?我的意思是像“sosiora”1或“sosiora”2。如何提取数字?findall方法返回匹配单词的列表,因此如果您这样做了:m=exactMatch.findall(@riky ini adalah@sosiora dengan huruf s)),那么m将是匹配单词的列表现在正在工作,但是如何分割字符串的数字呢?我正在编辑我的代码。@elcicko:这是一个新问题,与你原来的问题无关。@kasra,
\b
匹配单词字符和非单词字符,反之亦然。因此,不可能在行首和
@
或空格和
@
之间获得单词边界
\b
,因为两者都被视为非单词字符
\B
是一个非常合适的方法,它与
\B
正好相反。它现在正在工作,但是如何分割字符串的数字呢?我正在编辑我的代码。@elcicko:这是一个新问题,与你原来的问题无关。@kasra,
\b
匹配单词字符和非单词字符,反之亦然。因此,不可能在行首和
@
或空格和
@
之间获得单词边界
\b
,因为两者都被视为非单词字符
\B
是一个非常合适的方法,它与
\B
正好相反