数字和字符串之间的正则表达式“”存在问题

2024-10-01 13:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这根绳子

'1. A4  1... d5  2. c4  2... Yf6  3. NP3  3... dxc4  4. BO3  4... BK4  5. e3  5... Bf3  6. Q3  6... e6  7. Bc4  7... B4  8. O-O  8... B3  9. b3  9... O-O  10. B3  10... Re8  11. Q7  1-0'

我想删除不附在字母上的数字,如果你滚动到末尾,我想删除1-0,类似这样

['A4', 'd5', ..., 'O-O', ..., 'Q7']

所以我试过这个

re.findall(r'(?:[^\W\d_]+\d|\d+[^\W\d_])[^\W_]*|[^\W\d_]+', text)

但我明白了

['A4', 'd5', ..., 'O', 'O', ..., 'Q7']

因此,它删除了我想要的1-0-,但也删除了O-O


Tags: a4b3q3e3绳子c4e6d5
3条回答

为什么要在这里用正则表达式呢?您只需split字符串并获取奇数索引:

>>> s = '1. A4  1... d5  2. c4  2... Yf6  3. NP3  3... dxc4  4. BO3  4... BK4  5. e3  5... Bf3  6. Q3  6... e6  7. Bc4  7... B4  8. O-O  8... B3  9. b3  9... O-O  10. B3  10... Re8  11. Q7  1-0'
>>> list(itertools.islice(s.split(), 1, None, 2))
['A4',
 'd5',
 'c4',
 'Yf6',
 'NP3',
 'dxc4',
 'BO3',
 'BK4',
 'e3',
 'Bf3',
 'Q3',
 'e6',
 'Bc4',
 'B4',
 'O-O',
 'B3',
 'b3',
 'O-O',
 'B3',
 'Re8',
 'Q7']

您可以使用列表理解来迭代字符串和isidigt来检查每个项目是否包含数字

str1 = '1. A4  1... d5  2. c4  2... Yf6  3. NP3  3... dxc4  4. BO3  4... BK4  5. e3  5... Bf3  6. Q3  6... e6  7. Bc4  7... B4  8. O-O  8... B3  9. b3  9... O-O  10. B3  10... Re8  11. Q7  1-0'
output = list(filter(None, [i if i.replace("-","").isdigit()==False else None for i in str1.replace(".", "").split(' ')]))

打印(输出)给出:

['A4', 'd5', 'c4', 'Yf6', 'NP3', 'dxc4', 'BO3', 'BK4', 'e3', 'Bf3', 'Q3', 'e6', 'Bc4', 'B4', 'O-O', 'B3', 'b3', 'O-O', 'B3', 'Re8', 'Q7']

查找至少包含一个字母的所有单词:

re.findall(r'\S*[a-zA-Z]\S*', text)

['A4', 'd5', 'c4', 'Yf6', 'NP3', 'dxc4', 'BO3', 'BK4', 'e3', 'Bf3', 'Q3', 'e6', 'Bc4', 'B4', 'O-O', 'B3', 'b3', 'O-O', 'B3', 'Re8', 'Q7']

相关问题 更多 >