我有多个.txt文件,其中包含转换后的信息,如下所示:
> ** ** **|** ** STYLE # ** **|** ** DESCR : Potrero415;Tbl-
Rnd ** **\--------** ** ** **\--** **ZONE 1** **\--**
** ** **\--** **ZONE 2** **\--** ** ** **\----** ** -T1-
-T2- -T3-
**
我想抓取从DESCR:
到下一行开始的所有内容** **\--** ** ZONE 2 **
因此我的字符串应如下所示:DESCR : Potrero415;Tbl-Rnd
请注意,在该特定部分之前的文件中,有多行文本,DESCR
一词仅出现在我要复制的位置,以前没有其他出现。
我知道在** **\
出现之前可以使用拆分
所有文件都具有相同的格式,只需要从DESCR:
到** **
我知道我有冒险在这篇文章上投票。 更新: 我设法使用以下方法找到了单词的外观:
lines = test.readlines()
test.close()
for line in lines:
line = line.strip()
if line.find("DESCR") != -1:
print("FOUND")
其中test
是我打开的文件
答案 0 :(得分:1)
听起来像正则表达式的工作。
s
是文件的内容。
>>> import re
>>> s = ''' > ** ** **|** ** STYLE # ** **|** ** DESCR : Potrero415;Tbl-
... Rnd ** **\--------** ** ** **\--** **ZONE 1** **\--**
... ** ** **\--** **ZONE 2** **\--** ** ** **\----** ** -T1-
... -T2- -T3-
...
...
... ** '''
>>>
>>> re.search('(DESCR\s*:.*?)\s*\*\* \*\*', s, re.DOTALL).group(1)
'DESCR : Potrero415;Tbl-\nRnd'
(在正则表达式前加上(?s)与提供re.DOTALL
参数具有相同的效果。)
答案 1 :(得分:1)
您可以使用正则表达式
import re
match = re.search('(?=DESCR).*?(?=\*\*)', your_txt)
print(match.group(0))
将输出:
DESCR:Potrero415; Tbl-Rnd
Regex Demo with your test string
位置:
Positive Lookahead (?=DESCR)
Assert that the Regex below matches
DESCR matches the characters DESCR literally (case sensitive)
.*? matches any character
*? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
Positive Lookahead (?=\*\*)
Assert that the Regex below matches
\* matches the character * literally (case sensitive)
\* matches the character * literally (case sensitive)
Global pattern flags
s modifier: single line. Dot matches newline characters