Python正则表达式替换\ u2022

时间:2016-09-08 15:07:02

标签: python regex

这是我的字符串:

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.'

我正在尝试用空格替换\u2022

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

但它不起作用。我做错了什么?

4 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

答案 1 :(得分:1)

除非您使用 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' '})

答案 2 :(得分:1)

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

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

Out [1]:对软件和软件有着极大热情的软件工程师   创新产品。从大和都工作中获得的经验   快速增长的初创企业。专业语言和框架:   JavaScript(Nodejs,React),Android,Ruby on Rails 4,iOS(Swift)   数据库:Mongodb,Postgresql,MySQL,Redis测试框架:   Mocha,Rspec xxxx其他:Sphinx,MemCached,Chef。'

答案 3 :(得分:0)

关键是在您尝试查找的unicode字符前面添加unicode u - 在这种情况下是\u2022,它是项目符号的unicode字符。如果您的文本包含unicode字符,那么您的文本实际上是unicode文本而不是字符串(您可以通过打印文本并在开头查找u来确认)。请参阅下面的示例,其中我在字符串和unicode文本上使用正则表达式(RegEx)搜索unicode项目符号字符:

导入正则表达式包:
import re
unicode text:
my_unicode = u"""\u2022 Here\'s a string of data.\n<br/>\u2022 There 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_unicode) #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 
我们成功找到了我们正在寻找的第一段文字,但尚未包含unicode字符:
re.findall('\n<br/>', my_unicode)

re.findall('\n<br/>', my_string)
添加了unicode字符,无法找到子字符串:
re.findall('\n<br/>\u2022', my_unicode)

re.findall('\n<br/>\u2022', my_string)
添加四个反斜杠适用于字符串,但它不适用于unicode文本:
re.findall('\n<br/>\\\\u', my_unicode)

re.findall('\n<br/>\\\\u', my_string)
解决方案:在unicode角色前面加上unicode u
re.findall('\n<br/>' u'\u2022', my_unicode)