我在Python中有一个Unicode字符串,我想删除所有的重音符号(变音符号).
我在Web上发现了一种在Java中执行此操作的优雅方法:
我是否需要安装pyICU等库?或者只使用python标准库?那python 3怎么样?
重要说明:我想避免代码使用重音字符到非重音符号的显式映射.
假设我有一个看起来像这样的字符串:
str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"
Run Code Online (Sandbox Code Playgroud)
您会注意到字符串中有很多位置,其中有一个&符号,后跟一个字符(例如"&y"和"&c").我需要用字典中的适当值替换这些字符,如下所示:
dict = {"&y":"\033[0;30m",
"&c":"\033[0;31m",
"&b":"\033[0;32m",
"&Y":"\033[0;33m",
"&u":"\033[0;34m"}
Run Code Online (Sandbox Code Playgroud)
最快的方法是什么?我可以手动找到所有的&符号,然后循环通过字典来改变它们,但这似乎很慢.做一堆正则表达式替换似乎也很慢(我的实际代码中将有一个大约30-40对的字典).
任何建议表示赞赏,谢谢.
编辑:
正如在这个问题的评论中所指出的,我的字典是在运行时之前定义的,并且在应用程序生命周期的过程中永远不会改变.它是ANSI转义序列的列表,其中将包含大约40个项目.我要比较的平均字符串长度大约为500个字符,但最多可达5000个字符(但这些字符很少见).我目前也在使用Python 2.6.
编辑#2 我接受Tor Valamos的回答是正确的,因为它不仅提供了有效的解决方案(虽然它不是最好的解决方案),而是考虑了所有其他解决方案并做了大量的工作来比较所有这些.这个答案是我在StackOverflow上遇到过的最好,最有帮助的答案之一.感谢你.
有这样的清单:
x = ['+5556', '-1539', '-99','+1500']
Run Code Online (Sandbox Code Playgroud)
如何以漂亮的方式删除+和 - ?
这有效,但我正在寻找更多的pythonic方式.
x = ['+5556', '-1539', '-99', '+1500']
n = 0
for i in x:
x[n] = i.replace('-','')
n += 1
n = 0
for i in x:
x[n] = i.replace('+','')
n += 1
print x
Run Code Online (Sandbox Code Playgroud)
+而-并不总是处于领先地位; 他们可以在任何地方.
我有一个搜索字符串 如果搜索中的字符匹配,则用 None 替换
sear = '!%'
special_characters = ['!', '"', '#', '$', '%','(',')']
for remove_char in special_characters:
search_value = re.sub(remove_char, '', sear)
Run Code Online (Sandbox Code Playgroud)
我的输出出错了
预期是无
sear = 'ABC!%DEF'
Expected is 'ABCDEF'
Run Code Online (Sandbox Code Playgroud)
sear = 'ABC,DEF'
Expected is 'ABC,DEF'
Run Code Online (Sandbox Code Playgroud) 我是Python新手,我想知道如何用逗号(,)和冒号分割(:).我正在尝试加油站问题,我想从文本文件中读取这样的内容:
1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8
Run Code Online (Sandbox Code Playgroud)
我还想打开并从文件中读取这些数据并将其存储在链表中.
到现在为止我做了这个:
def GasStation(strArr):
strArr = []
f = open('Details.txt', 'r')
for line in f:
strArr.append(line)
amount, tank = int(strArr[0]),0
stations = [amount.split(":") for i in (strArr[1:] + strArr[1:-1])]
for curr in range(start, start+amount):
tank = tank + int(stations[curr][0]) - int(stations[curr][1])
if tank < 0: sys.exit()
if tank >= 0: return start+1
else: tank = 0
return "not"
Run Code Online (Sandbox Code Playgroud)
我也想打印作为答案的索引.
请帮帮我,我不明白为什么不给我打印答案.
谢谢.
在过去的几个小时里,我一直在尝试用一根镜头从一根长串中踢出一些符号,但是我怎么也不知道如何删除它们.如果我去使用.replace()函数,它将是一个更丑陋的方法,因为符号的数量不止一个,并且函数变得过长而无法覆盖它们.任何替代方式删除它们将非常感激.
这是我试过的:
exmpstr = "Hi there Sam! Don't you know that Alex (the programmer) created something useful or & easy to control"
print(exmpstr.replace("'","").replace("(","").replace(")","").replace("&",""))
print(exmpstr.replace("['()&]","")) #I know it can't be any valid approach but I tried
Run Code Online (Sandbox Code Playgroud)
我想要踢出的是'()&这个字符串中的符号,而不是我尝试使用.replace()函数的方式.
python ×6
string ×3
python-3.x ×2
algorithm ×1
diacritics ×1
list ×1
performance ×1
python-2.x ×1
regex ×1
replace ×1
symbols ×1
unicode ×1