我有以下代码可以在文本中找到:)
和:(
:
for match in re.finditer(r':\)|:\(', ":) :):( :) :("):
print match.span()
给我一个答案:
(0, 2)
(3, 5)
(5, 7)
(8, 10)
(12, 14)
它是有效的,但我需要它只显示那些单词是单独的(紧挨着没有其他字符),所以答案是:
(0, 2)
(8, 10)
(12, 14)
我尝试添加\b
,但没有得到答案
这是向模式中添加(x)的情况
for match in re.finditer(r'(?<![\w()]):(?:\)|\()(?![\w:])', ":) :):( :) :( (x)"):
print match.span()
显示:
(0, 2)
(8, 10)
(12, 14)
我想要什么
(0, 2)
(8, 10)
(12, 14)
(16, 19)
:
、(
和)
是非单词字符,因此\b
不起作用。您可以使用相反的\B
:其中
\b
在\w
和\W
之间的边界上匹配,反之亦然,\B
仅在两个\w
或两个\W
点之间匹配。由于:
和括号字符都是\W
字符,这意味着它们必须位于另一个非单词字符(或行的开始或结束)旁边。你知道吗不过,这仍然会与其他微笑相匹配。你知道吗
要完全排除其他笑脸,您需要同时使用负面展望和负面展望:
上面写着:
(?<![\w()])
:笑脸前面没有单词字符或括号(字符串开头可以)(?![\w:])
:笑脸后面没有单词字符或冒号(字符串结尾可以)演示:
对于更新的模式版本,您显然不介意
(
是否在前面,因此我们将其从模式前面的排除字符中删除,并将:
更新为[x:]
,以匹配x
或冒号:演示:
如果没有其他字符,则表示没有其他可见字符,因此笑脸周围只允许有空格(包括制表符),可以使用以下内容:
(?:(?<=\s)|(?<=^))
确保笑脸前有空格字符或行首:[()]
匹配:
,后跟(
或)
(?=\s|$)
确保笑脸后面有一个空格字符或行尾。你知道吗如果您还想匹配笑脸
x)
,可以使用以下命令:如果您还想匹配
x(
,那么就更容易了:[ ... ]
是字符类,您不需要转义其中的内容。注意-
和^
的位置,因为这两个词在字符类中有特殊的含义。你知道吗编辑:似乎我得到了错误的附加笑脸x)对于这个(意思是
:)
,:(
和(x)
),它有点像这样:reEDIT:事实上,肯定的断言可以用否定的断言来缩短,这样就更简单了:
相关问题 更多 >
编程相关推荐