【问题标题】:How to split a string into Left sub-string and Right sub-string with delimiter as Unicode如何将字符串拆分为左子字符串和右子字符串,分隔符为 Unicode
【发布时间】:2020-02-04 04:00:38
【问题描述】:

我有一个带有 Unicode 的字符串。我想将字符串拆分为以Unicode为分隔符的左子字符串和右子字符串。

例如,给定的字符串是:

str = 'Oh wow. Magnificent! Ariadna Garcia! <U+2764> <U+2764> wonderful'

我想输出为:

leftstr = 'Oh wow. Magnificent! Ariadna Garcia!'

uni_code = '<U+2764> <U+2764>'

rightstr = 'wonderful'

我想过使用正则表达式来识别 Unicode,然后使用 find() 找到 Unicode 的索引。然后使用带索引的字符串切片和切割方法,即leftstr = 起始索引比unicode的索引小一。然后,rightstr = (Unicode 的起始索引+Unicode 的长度) 直到字符串的结尾。 问题是我识别 Unicode 的正则表达式不起作用。我觉得,我的方法很复杂。有没有什么优雅的方法可以得到想要的子字符串作为输出。

下面的代码,我已经试过了:

import re str1 = 'Oh wow. Magnificent! Ariadna Garcia! <U+2764> wonderful'
pattern = r'<U\+.*?>' 
indx = str1.find(pattern) 
print(indx)

正则表达式未按预期工作。

【问题讨论】:

  • 您的字符串中是否字面意思有字符&lt;U+2764&gt;(长度为8)?还是 actual Unicode 字符 U+2764 (❤) 的占位符?
  • 是的,我的字符串中有 Unicode U+2764 (❤)。
  • 字符串中的每个字符都是 Unicode 字符,因此您必须更具体地说明您想要什么。例如,U+004F 是O
  • 好的!我只关心表情符号 Unicode。

标签: regex python-3.x string unicode


【解决方案1】:

不幸的是,表情符号很多,其中许多是多个序列,因此通用解决方案很复杂。这是 Unicode 的完整列表:

https://unicode.org/emoji/charts-13.0/emoji-list.html

直接的解决办法是:

import re

s = 'Oh wow. Magnificent! Ariadna Garcia! ❤ ❤ wonderful'
left,emoji,right = re.split(r'(\u2764 \u2764)',s)
print(left,emoji,right,sep='\n')
Oh wow. Magnificent! Ariadna Garcia! 
❤ ❤
 wonderful

您可以解析这些Unicode data files 以创建更复杂的正则表达式。例如,这会解析一系列表情符号:

import re

s = 'One?Two?Three?Four?Five'
result = re.split(r'([\U0001F600-\U0001F64F])',s)
print(result)
['One', '?', 'Two', '?', 'Three', '?', 'Four', '?', 'Five']

【讨论】:

  • 谢谢,马克。我在文本中有不同的表情符号 Unicode,我需要每个表情符号 Unicode 的左字符串和它们的右字符串。对于您的第二个示例,我希望输出为- leftstr1=One Emoji1=? rightstr1=Two; leftstr2=两个表情符号2=? rightstr2=三个; leftstr3=三个 Emoji3=? rightstr3=四个; leftstr4=四个 Emoji3=? rightstr4=五个。当然,我们将使用列表。我目前在根据需要拆分字符串时遇到问题。
猜你喜欢
  • 2015-12-28
  • 2017-06-27
  • 1970-01-01
  • 2011-11-25
  • 2014-06-29
  • 2019-05-22
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多