菜鸟在这里。我有一些字符串,我想保留一些表情符号并丢弃其余的表情。
输入:
这本书太有趣了❤️。这本书是炸弹(最佳影片) 我喜欢它!我绝对推荐它!'
期望的输出:
这本书太有趣了❤️。这本书是炸弹(最佳影片) 我喜欢它!我绝对推荐它!'
我有符合以下条件的re.compile:
我不知道如何在re.compile中将其组合在一起,从而将一个彼此排斥。或者,保留字母数字,标点符号和我的表情符号,然后将其余部分替换为“”。
mytext = This book is so funny❤️. This book is the bomb(AS IN THE BEST
IN THE WORLD )I love it!I definitely recommend it!'
# Desired out put:
# u'This book is so funny❤️. This book is the bomb(AS IN THE BEST
IN THE WORLD )I love it!I definitely recommend it!'
print ("Original text:")
print (mytext, "\n")
# Strip out emoticon modifiers, leaving a simplified emoticon to work with.
# https://en.wikipedia.org/wiki/Variation_Selectors_(Unicode_block)
# https://en.wikipedia.org/wiki/Variation_Selectors_Supplement
Emoji_Modifiers = re.compile(u'([\U0000FE00-\U0000FE0F])|([\U000E0100-\U000E0100])')
mytext_mod_gone = Emoji_Modifiers.sub(r'', mytext)
print ("Modifiers Removed:")
print (mytext_mod_gone, "\n")
# All emoticons
find_regex = re.compile(u'([\U00002600-\U000027BF])|([\U0001f300-\U0001f64F])|([\U0001f680-\U0001f6FF])')
# Heart emoticons
#find_regex = re.compile(u"([\U00002619])|([\U00002661])|([\U00002665])|([\U00002763])|([\U00002764])|([\U00002765])|([\U00002766])|([\U00002767])|([\U00002E96])|([\U00002E97])|([\U00002F3C])|([\U0001F394])|([\U0001F48C])|([\U0001F48F])|([\U0001F491])|([\U0001F493])|([\U0001F494])|([\U0001F495])|([\U0001F496])|([\U0001F497])|([\U0001F498])|([\U0001F499])|([\U0001F49A])|([\U0001F49B])|([\U0001F49C])|([\U0001F49D])|([\U0001F49E])|([\U0001F49F])|([\U0001F4D6])|([\U0001F5A4])|([\U0001F60D])|([\U0001F618])|([\U0001F63B])|([\U0001F970])|([\U0001F9E1])")
# Alphanumeric + punctuation for an alternative solution
#find_regex = re.compile(r"[^a-zA-Z0-9!,.?!#&'()*+,-./:;<=>?@\^_`{|}~\s]") #
mytext_emoji_gone = find_regex.sub(r'', mytext)
我跌倒在:
(?<!...)
后加上负向否定Unicode。我不太了解操作数,regex101.com仅适用于r',不适用于u'。re.compile(u'(\Uxxxx)' | r'(regex)' )
时会抱怨。 |:'str'和'str'不支持的操作数类型,因此OR类型语句在这里不起作用...并且OR给出不希望的结果。我可以在这两个方面寻求帮助吗?
答案 0 :(得分:1)
regex101具有Unicode选项,它是一个标志,您可以从regex框的右侧打开它。
我认为最简单的方法是找到字符串中除要保留的表情符号以外的所有表情符号,然后像您想要的那样用空字符串替换它们。为此,您可以使用可找到任何表情符号的正则表达式(在此示例中,我将使用[\U00010000-\U0010ffff]
,但我敢肯定有更好的表情符号,因此请使用其中之一),并在其中添加否定的外观忽略您要保留的表情符号。
结局正则表达式应类似于this:
(?![\u2764])[\U00010000-\U0010ffff]
第一部分(?![\u2764])
将确保比赛不是您想要保留的表情符号,第二部分[\U00010000-\U0010ffff]
将确保比赛是表情符号
您可以将所有希望保留的其他表情符号添加到方括号(?![\u2764
中
这里])
答案 1 :(得分:1)
我去了:
find_regex = re.compile(u"(?![\U00002619])(?![\U00002661])(?![\U00002665])(?![\U00002763])(?![\U00002764])(?![\U00002765])(?![\U00002766])(?![\U00002767])(?![\U00002E96])(?![\U00002E97])(?![\U00002F3C])(?![\U0001F394])(?![\U0001F48C])(?![\U0001F48F])(?![\U0001F491])(?![\U0001F493])(?![\U0001F494])(?![\U0001F495])(?![\U0001F496])(?![\U0001F497])(?![\U0001F498])(?![\U0001F499])(?![\U0001F49A])(?![\U0001F49B])(?![\U0001F49C])(?![\U0001F49D])(?![\U0001F49E])(?![\U0001F49F])(?![\U0001F4D6])(?![\U0001F5A4])(?![\U0001F60D])(?![\U0001F618])(?![\U0001F63B])(?![\U0001F970])(?![\U0001F9E1])"r"[^a-zA-Z0-9!,.?!#&'()*+,-./:;<=>?@\^_`{|}~\s]")
mytext_emoji_gone = find_regex.sub(r'', mytext)
去除了所有其他表情符号,只剩下心脏和书本表情符号,以及字母数字和标点符号。
作为我最初的问题的一部分,有没有办法堆叠这些?当前,这是一长行代码。我们可以做类似的事情吗?
regex = re.compile(a)
regex += re.compile(b)
那将使用房地产,但是我可以接受