首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex表达式以查找列表中的所有数字和破折号

Regex表达式以查找列表中的所有数字和破折号
EN

Stack Overflow用户
提问于 2022-05-12 13:09:56
回答 4查看 66关注 0票数 0

我试图把这个字符串'4-6,10-12,16‘转换成一个列表,看起来像这个4,“,6,10,-”,12,16。在列表中会有一个整数和特殊字符"-“的组合。

我试图在python中使用regex代码,但是只能提取数字,但是,我需要列表中的破折号。我如何在列表中包含带有数字的破折号?

这是我的代码:

代码语言:javascript
运行
复制
interval='4-6,10-12,16'
import re
l=[int(s) for s in re.findall(r'\b\d+\b', interval)]
EN

回答 4

Stack Overflow用户

发布于 2022-05-12 13:14:18

试试这个:

代码语言:javascript
运行
复制
interval='4-6,10-12,16'
import re
l=[int(s) if s.isnumeric() else s for s in re.findall(r'\d+|-', interval)]
l

输出:

代码语言:javascript
运行
复制
[4, '-', 6, 10, '-', 12, 16]
票数 2
EN

Stack Overflow用户

发布于 2022-05-12 13:12:22

您可以使用

代码语言:javascript
运行
复制
import re
interval='4-6,10-12,16'
l=[int(s) if all(c.isdigit() for c in s) else '-' for s in re.findall(r'\d+|-', interval)]
print(l) # => [4, '-', 6, 10, '-', 12, 16]

Python演示

详细信息

  • re.findall(r'\d+|-', interval)提取数字序列或-字符
  • 如果整个匹配由数字组成,int(s) if all(c.isdigit() for c in s) else '-'要么将数字序列转换为int,要么将-作为字符串返回。
票数 0
EN

Stack Overflow用户

发布于 2022-05-12 14:19:56

有用的职能:

  • str.isdigit (或str.isnumericstr.isdecimal);
  • itertools.groupby对共享特征的相邻字符进行分组。
代码语言:javascript
运行
复制
from itertools import groupby

def tokenize_digits_and_dashes(s):
    for k, g in groupby(s, key=lambda c: (c.isdigit(), c == '-')):
        if k == (True, False):
            yield int(''.join(g))
        elif k == (False, True):
            yield '-'

print(list(tokenize_digits_and_dashes('4-6,10-12,16')))
# [4, '-', 6, 10, '-', 12, 16]

替代方法

您的字符串已经以逗号,的形式包含分隔符。这些是有用的!别忽视他们。可以使用str.split拆分分隔符上的列表。

代码语言:javascript
运行
复制
def tokenize_intervals(s):
    for interval in s.split(','):
        i = interval.split('-')
        if len(i) == 2:
            yield tuple(int(''.join(w)) for w in i)
        elif len(i) == 1:
            x = int(''.join(i[0]))
            yield (x, x)

print(list(tokenize_intervals('4-6,10-12,16')))
# [(4, 6), (10, 12), (16, 16)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72216191

复制
相关文章

相似问题

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