这是我的字符串:
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)
但它不起作用。我做错了什么?
答案 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)