如何从文本中提取类似(010000 AAAAAAAA)的字符串

时间:2019-06-19 14:56:37

标签: python regex

我有一个这样的输入文件:

JTS
FF
010000 AAAAAAAA
text-text1.1
-text1.2-)

JTS
FF
020000 AAAAAAAA
text-text text
text-text2
-text2)

并使用以下代码:

import re
input = open("input.txt", "r")

for line in input.read().split(")"):

 mySubString=line[line.find("JTS"):line.find("JTS")+3]
 mySubString2=line[line.find("FF"):line.find("FF")+2]

 print(mySubString,end=",")
 print(mySubString2,end=",")

result = re.findall(r'-\s*(.*?)(?=\s*-)', line)
 print(",".join(result)+"\n")

我得到以下输出:

JTS,FF,,text1.1,text1.2

JTS,FF,,text2

所以我的目标是找到一种从每个段落的第三行中提取字符串的方法,以便像这样打印输出:

JTS,FF,010000 AAAAAAAA,text1.1,text1.2

JTS,FF,020000 AAAAAAAA,text2

请注意,此字符串始终位于每个段落的第三行,并且始终由15个字符组成,并且始终以数字开头和以字母结尾。

2 个答案:

答案 0 :(得分:2)

如果由于拆分而​​将段落表示为一行的原因。

我阅读文件并在其上循环查找每个段落的第三行,并将换行符(\ n)用作段落之间的分隔符,因此每次我找到换行符时,都会重置索引。

这样,我设法获得每个段落的第三行。

file = open("input.txt", "r")

third_lines = []
index = 0

for line in file:
    if index == 2:
        # rstrip() is to get rid of the linebreak
        third_lines.append(line.rstrip())
    index += 1
    if line == "\n":
        index = 0

print(third_lines)

# Output
# ['010000 AAAAAAAA', '020000 AAAAAAAA']

答案 1 :(得分:0)

如果您的最终目标是使用逗号将行连接起来,直到遇到右方括号,那么您根本就不需要正则表达式。例如,您可以这样做:

with open("input.txt", "r") as input:
    result = ''
    for line in input.readlines():
        line = line.strip()
        if len(line) > 0:
            if not line.endswith(')'):
                result += '{}{}'.format(line, ',')
            else:
                result += line.rstrip(')')
                print(result)
        else:
            result = ''

# Output:
# JTS,FF,010000 AAAAAAAA,text-text1.1,-text1.2-
# JTS,FF,020000 AAAAAAAA,text-text text,text-text2,-text2

如果您真的想使用正则表达式从第三行提取文本,则应遵循以下模式:r'^\d{6}\s\w{8}(?=\n)$'。例如:

import re

third_lines = []
with open("input.txt", "r") as input:
    for line in input.readlines():
        match = re.match(r'^\d{6}\s\w{8}(?=\n)$', line)
        if match:
            third_lines.append(match.group())

print(third_lines)

# Output:
# ['010000 AAAAAAAA', '020000 AAAAAAAA']

还要注意,以input = open("input.txt", "r")打开文件是not a good practice。使用with语句(例如with open("input.txt", "r") as input)打开文件可确保在处理完文件后正确关闭文件。