如何在 python 中的其他文本之间 select 某些文本?

How to select certain text between other text in python?

这是一个示例字符串:

text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."

我想把"patties"、"burgers"这几个词分开 手指”和 "meat" 从这篇文章中。我想把 chicken 之后但收盘价之前的词分开。

我什至不知道如何分离一个。我可以在 "chicken ' 之后拆分,但是我如何 select 直到下一个 ' 之前的文本?

我想遍历列表以将变量保存到数组中。感谢您提供的任何帮助。

您可以使用正则表达式:

import re

text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."

match = re.findall(r'chicken \'(\S+)\'', text)
print (match)

输出:

['patties', 'burgers', 'fingers', 'meat']

这是一个很好的 use-case 正则表达式。

import re
print(re.findall(r"chicken '(.*?)'", text))

下面是对正则表达式的解释:https://regex101.com/r/8IdseD/1

这是 python 代码 运行:https://repl.it/repls/SquareQuerulousModes

正则表达式,逐个部分:

  • chicken ' - 匹配文字文本
  • ( - 启动一个捕获组 - re.findall 将吐出的部分。
  • . - 匹配任意字符...
  • *? - ...任意次数,但尽可能少(这是为了确保我们不会捕获最后的 '
  • ) - 结束捕获组
  • ' - 匹配文字 '.

因此 re.findall 将为您提供组中捕获的所有子字符串的列表。

您可以使用 zero-width 环视来匹配周围环境:

(?<=chicken\s')[^']+(?=')
  • (?<=chicken\s') 是 zero-width 与 chicken '
  • 相匹配的正面回顾
  • [^']+ 匹配下一个单引号之前的部分,即所需的子字符串

  • (?=') 是 zero-width 正向超前匹配 ' 在所需的子字符串

  • 之后

示例:

In [713]: text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."                             

In [714]: re.findall(r"(?<=chicken\s')[^']+(?=')", text)                                                                                                                                                    
Out[714]: ['patties', 'burgers', 'fingers', 'meat']

Select 只是 "chicken" 第一次出现的句子部分:

chicken_text = text[text.find("chicken"):]

用空格拆分该文本:

chicken_words = chicken_text.split(" ")

扫描列表以查找以单引号开头和结尾的单词:

for word in chicken_words:
    if word[0] == "'" and word[-1] == "'":
        print word[1:-1]

如果 single-quoted 单词本身包含空格,这将不起作用,但在您提供的示例文本中并非如此。