我不确定如何在两个字符串之间获取第一个字符串或开始字符串" USER ID"和最后一个或结束的字符串"你可以"。
我想要一切,包括数字句号,特殊字符等。
但我也希望在保留的数据中包含两个字符串(这些开始和结束字符串代表我想要的数据)。
如何编写表达式以获取这些字符串之间的数据,同时还包括我的字符串作为结果的一部分?
看起来像什么
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:"以及所有内容,但不包括第二个单词"你可以"(我的情况)两个字符串可以是大写或小写。
所以我最终会得到很多:
Body: something
1. some question
you passed
或
Body: Something
1. You a...
2. Another
You Failed
答案 0 :(得分:0)
只要它不是递归的,正则表达式就会这样做:
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标记)。
现在解释正则表达式:.+
将匹配任何内容,点表示任何字符,加号表示一个或多个。问题.+
是"贪婪",它会匹配任何内容,包括你的终结符字符串"你可以"直到字符串结束。所以我们必须添加?
,在这种情况下,它意味着“不要贪婪”#34;不要与构造x?
混淆,这意味着零或一次出现' x'。
[更新]
由于您使用多行示例更新了问题,因此您可能必须包含re.DOTALL修饰符:
haystack = "Foo, bar\nUSER ID bla\n\t\nbla\nbla You can\n cheese"
m = re.findall(r'USER ID.+?You can', haystack, re.DOTALL)
if m:
print(haystack, "->", m)
else:
print(haystack, "->", "NO LUCK")
re.DOTALL
修饰符表示该点将匹配任何内容,包括行尾字符。