关于python 3.x:Python3正则表达式:保留一些Emojis,丢弃其余的

Python3 regex: Keep some Emojis, discard the rest

这里的菜。有。我在想让这两个emoji and discard休息。

输入:

这本书是如此的有趣吗????????。这本书吗??是炸弹(AS的最佳 在世界????????????????????????????????????)的法律??????????????????????????????它!当然,在recommend它!"

desired输出:

这本书是如此的有趣吗????????。本书是炸弹(AS的最佳 在世界)的法律??????????????????????????????它!当然,在recommend它!"

在我的re.compile配合:

  • 我的emoji
  • 从全emoji解释…………………看到大卫mabodo答案

我不知道如何把它在一起re.compile excludes是一个从其他。alternatively保持alphanumeric,标点符号,和我的emoji代用品,鸭的人。"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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,"
")

# 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,"
")

# 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)

我降下:

  • negating Unicode和一个负(?追溯。我不明白《operands足够好,regex101.com只读和厂用的,不是你的。
  • 混合在一起,在一个多re.compile正则表达式。我说,如果我想让我的alphanumeric emoji投诉的时候,它re.compile(u'(\Uxxxx)' | r'(regex)' )死。unsupported操作数的类型(S)|:"STR"和"STR",所以A型或陈述不安或在这里工作和undesired给出的结果。

可能我有一些帮助:或者…

  • ignoring A subset of表情符号和deleting休息(我的首选解决方案)
  • (alphanumeric保鲜,标点符号,和我的表情),和deleting休息。
  • 一个特定的问题:"你的re.compiles堆?2 IU创建两个不同的re.compiles匹配(或不匹配)的东西,然后和他们在一起。


我一起去:

1
2
3
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)

它去掉了所有其他的表情符号,只留下了心和书的表情符号,以及字母数字和标点符号。

作为我最初问题的一部分,有没有一种方法可以将它们叠加起来?目前,这是一行很长的代码。我们能做点什么吗?

1
2
regex = re.compile(a)
regex += re.compile(b)

那会用到垂直房地产,但我同意


regex101有一个unicode选项,它是一个标志,可以从regex框的右侧打开。

我认为最简单的方法是找到字符串中所有的emojis,除了那些你想保留的元素,然后像你想做的那样用空字符串替换它们。要做到这一点,您可以使用一个regex来查找任何emoji(在本例中,我将使用[\U00010000-\U0010ffff],但我确信有更好的emoji,所以请使用其中一个),并添加一个否定的前瞻性来忽略您希望保留的emoji。

最后一个regex应该类似于:

1
(?![\u2764])[\U00010000-\U0010ffff]

第一部分(?![\u2764])将确保匹配不是您希望保留的emoji,第二部分[\U00010000-\U0010ffff]将确保它是emoji。

你可以在方括号(?![\u2764中添加你希望保留的所有其他符号。这里是])