python - 如何删除多个子串?

标签 python string

我正在编写一个脚本,该脚本可以从 PGN 文件(一种用于描述国际象棋游戏的格式)中获取一些信息。我正在尝试将每个游戏的 Action 分别复制到另一个文件中。

但有时,有一些注释,用“{”和“}”字符标记,我想从字符串中删除它们(我将文件的每一行复制到字符串中,以便在写入之前进行一些调整在输出文件上)。

这种格式的字符串示例如下:

'1.e4 {some comment} c5 2.Nf3 d6 3.d4 {another comment} Nxd4 {you got it}'

我的第一个解决方案很简单:

my_string = my_string.replace(my_string[my_string.find('{'):my_string.find('}')], '')

不幸的是,这仅删除了第一组注释,如下所示:

'1.e4 } c5 2.Nf3 d6 3.d4 {another comment} Nxd4 {you got it}'

(剩下的'}'不是问题,可以通过以下方式删除:

my_string = my_string.replace('}', '')

所以我尝试循环字符串:

for char in my_string:
    if char == '{':
        my_string = my_string.replace(my_string[my_string.find('{'):my_string.find('}')], '')

同样的事情发生了,只是第一组评论被删除了。

然后我尝试了一个 while 循环:

while my_string.find('{') != -1:
    my_string = my_string.replace(my_string[my_string.find('{'):my_string.find('}')], '')

现在我陷入了无限循环......

有谁知道怎么解决这个问题吗?我也接受带有列表的解决方案,我可以将其嵌入其中:

temp_list = list(my_string)
#solution with list manupulation
my_string = ''.join(temp_list)

最佳答案

正则表达式非常适合此目的。

import re
re.sub(r'\s*{.*?}\s*', ' ', my_string)
# '1.e4 c5 2.Nf3 d6 3.d4 Nxd4 '

“用一个空格替换任意数量的空白、开放式 curl 、尽可能少的任何内容(换行符除外),后跟封闭式 curl 和任意数量的空白”

关于python - 如何删除多个子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29225102/

相关文章:

python - 使用正则表达式查找字符串中的所有小写字母附加到列表。 Python

python - Django View 发送带有正确 header 的空回复

python - 有没有办法在Python中分配对对象属性的引用?

r - 如何使用 R data.table 比较列之间的多个字符串长度?

javascript - 正则表达式 - 用打开和关闭标记替换备用特殊字符

c - C语言中如何从字符串中获取子字符串?

java - 如何遍历 Java 字符串的 unicode 代码点?

python - 如何在 yield 中扩展元组?

java - 如何从用户输入中拆分 "\n"?

python - 当指数为负时,为什么 numpy.power 不按元素对数组进行操作?