加入正则表达式搜索的输出

时间:2019-01-01 10:40:09

标签: python python-3.x

  • 我有一个正则表达式,用于在文件中查找数字。
  • 我将结果放在列表中

问题在于,它将针对找到的每个数字在新行上打印每个结果。它也忽略了我创建的列表。

我要做的是将所有数字都放在一个列表中。 我使用了join(),但是它不起作用。

代码:

def readfile():
    regex = re.compile('\d+')
for num in regex.findall(open('/path/to/file').read()):
    lst = [num]
    jn = ''.join(lst)    
    print(jn)

输出:

122
34
764

3 个答案:

答案 0 :(得分:3)

出了什么问题:

# this iterates the single numbers you find - one by one
for num in regex.findall(open('/path/to/file').read()):  
    lst = [num]                  # this puts one number back into a new list
    jn = ''.join(lst)            # this gets the number back out of the new list
    print(jn)                    # this prints one number

修复

阅读re.findall()的节目是您,它已经返回了列表。

不需要({很多)在其上使用for进行打印。

如果您想要一个列表-只需使用re.findall()的返回值-如果您要打印该列表,请使用Printing an int list in a single line python3中的一种方法(SO上有几篇关于在一行中打印的文章) ):

import re

my_r = re.compile(r'\d+')                 # define pattern as raw-string

numbers = my_r.findall("123 456 789")     # get the list

print(numbers)

# different methods to print a list on one line
# adjust sep  / end to fit your needs
print( *numbers, sep=", ")                # print #1

for n in numbers[:-1]:                    # print #2
    print(n, end = ", ")
print(numbers[-1])

print(', '.join(numbers))                 # print #3

输出:

['123', '456', '789']   # list of found strings that are numbers
123, 456, 789
123, 456, 789
123, 456, 789

Doku:


有关一行打印的更多信息:

答案 1 :(得分:1)

在您的情况下,regex.findall()返回一个列表,您要加入每次迭代并打印它。

这就是为什么您遇到此问题的原因。

您可以尝试类似的方法。

  

numbers.txt

Xy10Ab
Tiger20
Beta30Man
56
My45one
  

声明:

>>> import re
>>>
>>> regex = re.compile(r'\d+')
>>> lst = []
>>>
>>> for num in regex.findall(open('numbers.txt').read()):
...     lst.append(num)
...
>>> lst
['10', '20', '30', '56', '45']
>>>
>>> jn = ''.join(lst)
>>>
>>> jn
'1020305645'
>>>
>>> jn2 = '\n'.join(lst)
>>> jn2
'10\n20\n30\n56\n45'
>>>
>>> print(jn2)
10
20
30
56
45
>>>
>>> nums = [int(n) for n in lst]
>>> nums
[10, 20, 30, 56, 45]
>>>
>>> sum(nums)
161
>>>

答案 2 :(得分:-1)

使用列表内置函数来附加新值。

def readfile():
regex = re.compile('\d+')
lst = []

for num in regex.findall(open('/path/to/file').read()):
    lst.append(num)

print(lst)