Python从一行中读取某些文本
所以我想用Python“抓取”文本文件的某个部分,而你只知道这个特定文本前后的内容。我想要一个类似于答案的答案,但只需要一行。例如,如果我有一个名为Python从一行中读取某些文本,python,regex,Python,Regex,所以我想用Python“抓取”文本文件的某个部分,而你只知道这个特定文本前后的内容。我想要一个类似于答案的答案,但只需要一行。例如,如果我有一个名为test.txt的文本文件,它看起来像: This is my test file 那我可以用 with open('test.txt') as input_data: for line in input_data: if line.strip() == 'is': break fo
test.txt
的文本文件,它看起来像:
This
is
my
test
file
那我可以用
with open('test.txt') as input_data:
for line in input_data:
if line.strip() == 'is':
break
for line in input_data:
if line.strip() == 'test':
break
print(line)
…这对于抓取我的
很好,但是如果我的文本文件是单行,例如:
This is my test file
那就不行了。我不想通过字符串索引获取my
,因为我想要的东西只能在知道行的前、后部分的基础上工作。我试着看了很多问题,但没有发现任何问题
谢谢大家! 您可以通过正则表达式获得:
with open('test.txt') as input_data:
for line in input_data:
match = re.search(r' is (.*) test ', line)
if match:
print(line)
print(match.group(1))
第三行查找带有“is test”的模式,如果找到,它将首先打印整行,然后只打印“is”和“my”之间的字符串。我不知道你喜欢哪一个
编辑:将正则表达式更改为在“is”之前包含空格,否则“This”也会匹配。删除了lookahead和lookahead,因为这是不必要的您可以通过正则表达式获得:
with open('test.txt') as input_data:
for line in input_data:
match = re.search(r' is (.*) test ', line)
if match:
print(line)
print(match.group(1))
第三行查找带有“is test”的模式,如果找到,它将首先打印整行,然后只打印“is”和“my”之间的字符串。我不知道你喜欢哪一个
编辑:将正则表达式更改为在“is”之前包含空格,否则“This”也会匹配。删除“前瞻”和“后置”,因为不必要的让我们考虑这个测试文件:
$ cat testfile
This
is
my
test
file
this is your test file
要获得两个匹配项,请执行以下操作:
>>> import re
>>> re.findall(r'\bis\s+(.*?)\s+test\b', open('testfile').read())
['my', 'your']
如果我们想更加小心地确保文件已关闭,我们应该将与
一起使用:
>>> with open('testfile') as f:
... re.findall(r'\bis\s+(.*?)\s+test\b', f.read())
...
['my', 'your']
让我们考虑这个测试文件:
$ cat testfile
This
is
my
test
file
this is your test file
要获得两个匹配项,请执行以下操作:
>>> import re
>>> re.findall(r'\bis\s+(.*?)\s+test\b', open('testfile').read())
['my', 'your']
如果我们想更加小心地确保文件已关闭,我们应该将与
一起使用:
>>> with open('testfile') as f:
... re.findall(r'\bis\s+(.*?)\s+test\b', f.read())
...
['my', 'your']
您可以使用索引
查找起始词和结束词,然后获取子字符串
您可以使用
索引
查找起始词和结束词,然后获取子字符串如果您想在“is”和“test”之间获取一些信息,则正则表达式可能会帮助您,如下所示:
with open('test.txt') as input_data:
match = re.findall(r'\sis\s*(\w[\s\S]+?)\s*test', input_data.read())
for item in match:
print item
看起来您想在“is”和“test”之间获取一些信息,那么正则表达式可能会帮助您,如下所示:
with open('test.txt') as input_data:
match = re.findall(r'\sis\s*(\w[\s\S]+?)\s*test', input_data.read())
for item in match:
print item
我认为OP是在寻找两个字符串之间的内容,比如
is
和test
。my
是可以变化的。感谢您澄清@TigerhawkT3我将编辑问题以指定打印匹配。组(1
)?谢谢,编辑了正则表达式并删除了第一个捕获组,但没有调整打印语句。我正要说我遇到了一个错误,但@Hooting带来了修复,你们太棒了!非常感谢。我认为OP是在寻找两个字符串之间的内容,比如is
和test
。my
是可以变化的。感谢您澄清@TigerhawkT3我将编辑问题以指定打印匹配。组(1
)?谢谢,编辑了正则表达式并删除了第一个捕获组,但没有调整打印语句。我正要说我遇到了一个错误,但@Hooting带来了修复,你们太棒了!非常感谢。