Python只查找具有特定长度数字的字符串

时间:2016-04-21 11:35:00

标签: python numbers

我正在尝试创建一个脚本,用于搜索output.txt中只有特定长度数字的数字字符串。

示例output.txt:

12345678
77777
12123887

当我使用时:

import re 
f = open('output.txt', 'r')
strings = re.findall(r'(\d{5,5})', f.read())
print strings

我只想输出:77777而不是:

12345
77777
12123

6 个答案:

答案 0 :(得分:2)

非正则表达式解决方案。这可以通过获取每个名称的长度并通过验证isdigit得到感兴趣的名称来完成:

with open('output.txt') as f:
    file_names = [name.strip() for name in f.readlines() if name.strip().isdigit() and len(name.strip()) == 5]

print(file_names)

答案 1 :(得分:2)

使用^(\d{5})$re.MULTILINE

>>> import re
>>> data = '''12345678
77777
12123887'''
>>> p = re.compile(r'^(\d{5})$', re.MULTILINE)
>>> re.findall(p, data)
['77777']
>>>

答案 2 :(得分:1)

只需指定您期望的边界:您希望5位数字不被其他数字包围:

with open("output.txt", "r") as f:
   strings=re.findall(r'\b(\d{5})\b', f.read())
   print strings

答案 3 :(得分:1)

line = f.read()
line.rstrip()
if len(line) == 5 and not re.match('[^\d]', line):
    print(line)

len非常快,您可以保持正则表达式尽可能简单。

答案 4 :(得分:1)

这应该适合你..

f = open('input.txt', 'r')
file_str = f.read()

for line in str.split(file_str):
    if len(line) == 5: # you can manipulate the number 5 as you like .
        print(line)

答案 5 :(得分:0)

如果您想使用基于正则表达式的解决方案,则应使用\b

strings = re.findall(r'\b\d{5}\b', f.read()) # Returns ['77777']
  

匹配空字符串,但仅匹配单词的开头或结尾。单词被定义为Unicode字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字的非下划线Unicode字符表示。请注意,正式地,\b被定义为\w\W字符之间的边界(反之亦然),或\w与字符串的开头/结尾之间的边界。这意味着r'\bfoo\b'匹配'foo''foo.''(foo)''bar foo baz'但不匹配'foobar''foo3'