我有一个这样的输入文件:
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个字符组成,并且始终以数字开头和以字母结尾。
答案 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
)打开文件可确保在处理完文件后正确关闭文件。