正则表达式也采用for循环索引

时间:2018-02-06 09:55:27

标签: python regex

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

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)

输入数据如下:

123, 456
111 * 222
LL123-456
35

我得到一个如下所示的输出:

123
0
456
1
111
2
222
3
35
4

最终所需的输出应为:

123
456
111
222
35

所以只有作为输入实际给出的数据。

2 个答案:

答案 0 :(得分:1)

您可以像这样更改代码:

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)

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

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)

如果您需要整数而不是字符串,则可以使用

将列表转换为生成器
all_integers = map(int, all_numbers)
for i in all_integers:
    print(i)

但请记住,发电机只能使用一次。

答案 1 :(得分:-1)

你可以试试这个:

>>> data = """123, 456
... 111 * 222
... LL123-456
... 35"""
>>> data = data.replace(',', '')
>>> data = data.split()
>>> x = [int(i) for i in data if i.isdigit()]
>>> print(x)

输出

[123, 456, 111, 222, 35]