首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除Python中包含整数的特定子字符串

删除Python中包含整数的特定子字符串
EN

Stack Overflow用户
提问于 2020-05-05 09:43:35
回答 2查看 46关注 0票数 1

对于一个小项目,我试图将象棋游戏字符串转换为国际象棋动作的list。给定的字符串可能如下所示:s="1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6"

现在,我想知道是什么最有效的方法来去除我们在游戏中的移动对中的整数(例如"1."),而不是指示棋子移动到哪个领域的整数(例如"e4")。

我目前的做法如下:

代码语言:javascript
运行
复制
s = s.replace('.', '').split(" ")
s = [e for e in s if not e.isdigit()]

如果我不想转换成列表,而只是删除上面提到的特定部分,我将如何有效地做到这一点?为此,我可以使用re的正则表达式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 09:54:47

您可以使用endswith检查以.结尾的子字符串。

代码语言:javascript
运行
复制
s="1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6"

s = " ".join([substr for substr in s.split() if not substr.endswith('.')])

输出:'e4 e5 Nf3 Nf6 Nc3 d6 Bc4 h6 d3 Be7 Be3 Nc6'

票数 2
EN

Stack Overflow用户

发布于 2020-05-05 10:00:36

为此,您可以使用re.split,方法如下:

代码语言:javascript
运行
复制
import re
s = "1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6"
moves = re.split(r'\s*\d+\.\s*', s)
print(moves)

输出:

代码语言:javascript
运行
复制
['', 'e4 e5', 'Nf3 Nf6', 'Nc3 d6', 'Bc4 h6', 'd3 Be7', 'Be3 Nc6']

请注意,我使用了所谓的原始字符串(或r-字符串),因此不必转义\,我使用的模式可能是:

  • 0或更多的空白
  • 1或更多位数(0-9)
  • . (这需要转义,因为.在模式中有特殊的意义)
  • 0或更多的空白

如果您喜欢交互式解释,可以将该模式粘贴到regex101.com中。请注意,在移动开始时有空的str,但是使用列表切片(即moves = moves[1:])可以很容易地删除它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61610155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档