2

我想知道如何打印 \begin 语句和 \end 语句之间的所有文本。这是我现在的代码。另外,我怎样才能避免打印位于这两个语句之间的某些单词?

content=open("file", "r")
print content
content.read()

while len(content.split(start,1)) > 1:
    start=("\begin")
    end=("\end")
    s=content
    print find_between( s, "\begin", "\end" )


def find_between( s, first, last ):
    try:
        start = s.index( first ) + len( first )
        end = s.index( last, start )
        return s[start:end]
     except ValueError:
        return ""



print find_between( s, "\begin", "\end" )
4

3 回答 3

1

此示例假定您不介意丢失\beginand\end行上的数据。它将打印\begin和之间所有出现的数据\end

f = open("file", "r")

content = f.readlines()

f.close()

start = "\\begin"
end = "\\end"

print "Start ==", start, "End ==", end

printlines = False

for line in content:

    if start in line:
        printlines = True
        continue

    if end in line:
        printlines = False
        continue

    if printlines == True:
        print line

输入文件 -

test
\begin do re me fa
so la te do.


do te la so \end fa me re do

输出 -

Start == \begin End == \end
so la te do.
于 2013-09-27T22:23:02.940 回答
0

正则表达式对这类事情有好处。

In [152]: import re
In [153]: s = 'this is some \\begin string that i need to check \end some more\\begin and another \end stuff after'
In [167]: re.findall(r'\\begin(.*?)\\end', s)
[' string that i need to check ',
 ' and another ']

正则表达式:

使用原始字符串,因为 \ 对正则表达式解析器意味着某些东西。\begin 和 \end 是要匹配的原始字符串。你必须做两次反斜杠,因为反斜杠对于正则表达式来说意味着“特殊”,所以你需要 \ 来实际匹配一个反斜杠。.*? = 点匹配任何内容,* 表示匹配 0 次或更多次重复。这 ?关闭贪婪行为 - 否则,它将匹配第一个开始和最后一个结束之间的所有内容,而不是匹配之间的所有内容。

然后 findall 会为您提供所有匹配项的列表。

于 2013-09-28T00:45:47.850 回答
0

假设文件中只有一个“\begin”到“\end”块:

f = open('file', 'r')

between = ''
in_statement = False

for line in f:
    if '\begin' in line:
        in_statement = True
    if in_statement:
        between += line
    if '\end' in line:
        in_statement = False
        break

print between
f.close()
于 2013-09-27T22:20:00.820 回答