python正则表达式只获取两个字符串之间的数据

2024-09-19 23:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何在两个字符串(第一个或开头的字符串“userid”和最后一个或结束字符串“youcan”)之间获取数据。在

我想要所有的东西,包括数字、句点、特殊字符等等

但是我还想在保存的数据中包括这两个字符串(这些开始和结束字符串表示我想要的数据)。在

如何编写表达式以获取这些字符串之间的数据,同时将字符串作为结果的一部分?在

它的样子

Body:  Results of
User ID User Score  Full Score  Passing Score   Passing Status  Post Date   Elapsed
1   6   7   5   Pass    2014-9-3 16:12:27   00:00:25
Student Information
Student information
E-mail s
First Name  s
Last Name   s
Information on each question
Question    Question Type   Points  User's Response(s)  Correct Answer  Result
1. A
2. 
3. In l
4. The 
5. A 
Congratulations, you passed!
You can import

我想要什么

包含Body的行:(包括单词“Body:”,以及所有下至但不包括第二个中断词“youcan”(其中我的两个字符串的大小写可以是大写或小写。在

所以我最后会有很多:

^{pr2}$

或者

Body: Something
1. You a...
2. Another
You Failed

Tags: 数据字符串nameyouinformationbody数字student
1条回答
网友
1楼 · 发布于 2024-09-19 23:38:31

只要不是递归的,regex将执行以下操作:

In [1]: import re                                                                                                                              

In [2]: haystack1 = "Foo, bar, USER ID bla bla bla You can - cheese"                                                                           

In [3]: haystack2 = "Foo, bar, USER FOO bla bla bla You can - cheese"                                                                          

In [4]: haystack3 = "Foo, bar, USER ID bla USER ID bla bla You can foo You can - cheese"                                                       

In [5]: for haystack in (haystack1, haystack2, haystack3):
   ...:     m = re.search(r'USER ID.+?You can', haystack)
   ...:     if m:
   ...:         print(haystack, "->", m.group(0))                                                                                              
   ...:     else:
   ...:         print(haystack, "->", "NO LUCK")
   ...:         
('Foo, bar, USER ID bla bla bla You can - cheese', '->', 'USER ID bla bla bla You can')
('Foo, bar, USER FOO bla bla bla You can - cheese', '->', 'NO LUCK')
('Foo, bar, USER ID bla USER ID bla bla You can foo You can - cheese', '->', 'USER ID bla USER ID bla bla You can')

如果您看一下haystack 3,您将看到它为什么不剪切递归字符串片段(如HTML/XML标记)。在

现在解释正则表达式:.+将匹配任何内容,点表示任何字符,加号表示一个或多个字符。.+的问题是它是“贪婪的”,它将匹配任何内容,包括终止符字符串“youcan”直到字符串的结尾。所以我们必须加上?,在这里它的意思是“不要贪心”。不要与x?结构混淆,它意味着“x”的零次或一次出现。在

[更新]

由于您用多行示例更新了问题,您可能必须包括雷多尔修饰语:

^{pr2}$

re.DOTALL修饰符意味着点将匹配任何内容,包括行尾字符。在

相关问题 更多 >