gpt4 book ai didi

python - 在python中使用正则表达式捕获表情

转载 作者:太空狗 更新时间:2023-10-29 21:26:58 28 4
gpt4 key购买 nike

我想要一个正则表达式模式来匹配笑脸“:)”,“:(”。它还应该捕获重复的笑脸,如“:) :)”,“:) :(”但过滤掉无效的语法,如":( (".

我有这个,但它匹配 ":( ("

bool( re.match("(:\()",str) ) 

我可能在这里遗漏了一些明显的东西,我需要一些帮助来完成这个看似简单的任务。

最佳答案

我认为它最终“点击”了您在这里询问的内容。看看下面的内容:

import re

smiley_pattern = '^(:\(|:\))+$' # matches only the smileys ":)" and ":("

def test_match(s):
print 'Value: %s; Result: %s' % (
s,
'Matches!' if re.match(smiley_pattern, s) else 'Doesn\'t match.'
)

should_match = [
':)', # Single smile
':(', # Single frown
':):)', # Two smiles
':(:(', # Two frowns
':):(', # Mix of a smile and a frown
]
should_not_match = [
'', # Empty string
':(foo', # Extraneous characters appended
'foo:(', # Extraneous characters prepended
':( :(', # Space between frowns
':( (', # Extraneous characters and space appended
':((' # Extraneous duplicate of final character appended
]

print('The following should all match:')
for x in should_match: test_match(x);

print('') # Newline for output clarity

print('The following should all not match:')
for x in should_not_match: test_match(x);

您的原始代码的问题是您的正则表达式是错误的:(:\()。让我们分解一下。

外面的括号是一个“分组”。如果您要进行字符串替换,它们就是您要引用的内容,并且用于一次对字符组应用正则表达式运算符。所以,你真的是在说:

  • ( 开始一组
    • :\( ... 做正则表达式的东西 ...
  • ')'结束本团

: 不是正则表达式保留字符,所以它只是一个冒号。 \ 是,它的意思是“以下字符是文字​​,而不是正则表达式运算符”。这称为“转义序列”。完全解析成英语,你的正则表达式说

  • ( 开始一组
    • :一个冒号字符
    • \( 一个左括号字符
  • )结束群

我使用的正则表达式稍微复杂一些,但还不错。让我们分解一下:^(:\(|:\))+$

^$ 分别表示“行首”和“行尾”。现在我们有...

  • ^ 行首
    • (:\(|:\))+ ...做正则表达式的东西...
  • $ 行尾

...所以它只匹配组成整行的内容,而不是简单地出现在字符串的中间。

我们知道 () 表示一个分组。 + 表示“其中之一”。现在我们有:

  • ^行首
  • ( 开始一个群
    • :\(|:\) ...做正则表达式的东西...
  • )结束群
  • + 匹配其中的一个或多个
  • $ 行尾

最后,还有 |(管道)运算符。意思是“或”。因此,应用我们从上面了解的有关转义字符的知识,我们已准备好完成翻译:

  • ^行首
  • ( 开始一个群
    • :一个冒号字符
    • \( 一个左括号字符
  • |
    • :一个冒号字符
    • \)一个右括号字符
  • )结束群
  • + 匹配其中的一个或多个
  • $ 行尾

希望对您有所帮助。如果没有,请告诉我,我很乐意通过回复来编辑我的答案。

关于python - 在python中使用正则表达式捕获表情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com