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(在本例中,我将使用
最后一个regex应该类似于:
1 | (?![\u2764])[\U00010000-\U0010ffff] |
第一部分
你可以在方括号