首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式还使用for循环进行索引

正则表达式还使用for循环进行索引
EN

Stack Overflow用户
提问于 2018-02-06 17:55:27
回答 2查看 66关注 0票数 3

下面的正则表达式做的正是我想要它做的事情,除了它还将索引输出为一个数字(我认为它就是索引)。这弄乱了我的输出。那么我怎么才能告诉它不要取索引呢?

代码语言:javascript
运行
复制
import re
import pandas as pd

df = pd.read_excel("tstfile.xlsx", names=["col1"])

for index, row in df.iterrows():
    # print(index)
    if str(row[0]).split():
        if not re.findall("(.[A-Z]\d+\-\d+)", str(row)):
            for i in re.findall("(\d+)", str(row)):
                print(i)

输入数据将如下所示:

代码语言:javascript
运行
复制
123, 456
111 * 222
LL123-456
35

我得到了如下所示的输出:

代码语言:javascript
运行
复制
123
0
456
1
111
2
222
3
35
4

最终的期望输出应该是:

代码语言:javascript
运行
复制
123
456
111
222
35

因此,只有实际作为输入给出的数据。

EN

Stack Overflow用户

回答已采纳

发布于 2018-02-06 18:52:22

你可以像这样修改你的代码:

代码语言:javascript
运行
复制
for row in df.values.astype(str):
    for word in row:
        if not re.findall("(.[A-Z]\d+\-\d+)", word):
            for num in re.findall("(\d+)", word):
                print(num)

或者,下面是一个one行,它将数据帧值转换为字符串,并使用re.findall方法将数字提取为字符串。以大写字母开头且包含减号的单词将被排除。

代码语言:javascript
运行
复制
all_numbers = re.findall(r'(\d+)', ' '.join([j for i in df.values.astype(str) for j in i if not re.search(r'[A-Z].+\-', j)]))
for item in all_numbers:
    print(item)

如果需要整数而不是字符串,可以使用以下命令将列表转换为生成器

代码语言:javascript
运行
复制
all_integers = map(int, all_numbers)
for i in all_integers:
    print(i)

但请记住,生成器只能使用一次。

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

https://stackoverflow.com/questions/48640098

复制
相关文章

相似问题

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