繁体   English   中英

Python正则表达式替换\\ u2022

[英]Python regex replacing \u2022

这是我的字符串:

raw_list = u'Software Engineer with a huge passion for new and innovative products. Experienced gained from working in both big and fast-growing start-ups.  Specialties \u2022 Languages and Frameworks: JavaScript (Nodejs, React), Android, Ruby on Rails 4, iOS (Swift) \u2022 Databases: Mongodb, Postgresql, MySQL, Redis \u2022 Testing Frameworks: Mocha, Rspec xxxx Others: Sphinx, MemCached, Chef.'

我正在尝试仅用空格替换\•

x=re.sub(r'\u2022', ' ', raw_list)

但这不起作用。 我究竟做错了什么?

您正在使用带有r的原始字符串。 这告诉Python从字面上解释字符串,而不是实际使用转义字符(例如\\ n)。

>>> r'\u2022'
'\\u2022'

您可以看到它实际上是一个双反斜杠。 相反,您想使用>>> u'\•' ,然后它将起作用。

请注意,由于您要进行简单的替换,因此只能使用str.replace方法:

x = raw_list.replace(u'\u2022', ' ')

您只需要使用正则表达式替换即可进行复杂的模式匹配。

除非您使用Unicode字符串文字,否则\\uhhhh转义序列没有任何意义。 不用于Python,也不用于re模块。 添加u前缀:

re.sub(ur'\u2022', ' ', raw_list)

注意那里的ur 那是原始的unicode字符串文字; 这仍然会解释\\uhhhh Unicode转义序列(但在其他方面与标准原始字符串文字模式相同)。 re模块本身不支持此类转义序列(但它支持大多数其他Python字符串转义序列)。

不必在这里使用正则表达式,一个简单的unicode.replace()就足够了:

raw_list.replace(u'\u2022', u' ')

或者您可以使用unicode.translate()

raw_list.translate({0x2022: u' '})

这是我的方法,更改正则表达式模式,您可以尝试

re.sub(r'[^\x00-\x7F]+','',raw_list)

出[1]:u'软件工程师,对新的创新产品充满热情。 从大型和快速成长的初创公司工作中积累的经验。 特殊语言和框架:JavaScript(Nodejs,React),Android,Ruby on Rails 4,iOS(Swift)数据库:Mongodb,Postgresql,MySQL,Redis测试框架:Mocha,Rspec xxxx其他:Sphinx,MemCached,Chef。

关键是将unicode u添加到要查找的unicode字符之前-在本例中为\• ,它是项目符号的unicode字符。 如果您的文本包含unicode字符,则您的文本实际上是unicode文本,而不是字符串(您可以通过打印文本并在开头查找u来进行确认)。 请参见下面的示例,在该示例中,我同时在字符串和unicode文本上使用正则表达式(RegEx)搜索Unicode项目符号字符:

导入正则表达式包:
 import re 
Unicode文字:
my_string = """\u2022 Here\'s a string of data. \n<br/>\u2022There are new 
line characters \n, HTML line break tags <br/>, and bullets \u2002 together in 
a sequence.\n<br/>\u2022 Our goal is to use RegEx to identify the sequences."""

type(my_string)     #string 
串:
 my_string = """\• Here\\'sa string of data. \\n<br/>\•There are new line characters \\n, HTML line break tags <br/>, and bullets \  together in a sequence.\\n<br/>\• Our goal is to use RegEx to identify the sequences.""" type(my_string) #string 
我们成功找到了要查找的第一段文本,但该段文本尚未包含unicode字符:
re.findall('\n<br/>\\\\u', my_unicode)

re.findall('\n<br/>\\\\u', my_string)
加上unicode字符,找不到任何子字符串:
 re.findall('\\n<br/>\•', my_unicode) re.findall('\\n<br/>\•', my_string) 
添加四个反斜杠适用于该字符串,但不适用于unicode文本:
 re.findall('\\n<br/>\\\\\\\\u\u0026#39;, my_unicode) re.findall('\\n<br/>\\\\\\\\u\u0026#39;, my_string) 
解决方案:在unicode字符前面包括unicode u
 re.findall('\\n<br/>' u'\•', my_unicode) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM