gpt4 book ai didi

python - 如何在一行中搜索字符串并在python中提取两个字符之间的数据?

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:27 25 4
gpt4 key购买 nike

文件内容:

module traffic(
green_main, yellow_main, red_main, green_first, yellow_first,
red_first, clk, rst, waiting_main, waiting_first
);

我需要搜索字符串 'module' 并且我需要提取 (......) 之间的内容;括号。

这是我试过的代码,我无法得到结果

fp = open(file_name)
contents = fp.read()
unique_word_a = '('
unique_word_b = ');'
s = contents

for line in contents:
if 'module' in line:
your_string=s[s.find(unique_word_a)+len(unique_word_a):s.find(unique_word_b)].strip()
print(your_string)

最佳答案

你的代码的问题在这里:

for line in contents:
if 'module' in line:

这里,contents 是包含文件全部内容的单个字符串,而不是字符串(行)列表或可以逐行循环的文件句柄。因此,您的 line 实际上不是一行,而是该字符串中的单个字符,显然 never 不能包含子字符串 "module" .

由于您实际上从未在循环中使用,因此您只需删除循环和条件,您的代码就可以正常工作。 (如果您将代码更改为实际循环行,并在这些行中找到 find,它将无法工作,因为 () 不是在同一行。)


或者,您可以使用正则表达式:

>>> content = """module traffic(green_main, yellow_main, red_main, green_first, yellow_first, 
... red_first, clk, rst, waiting_main, waiting_first);"""
...
>>> re.search("module \w+\((.*?)\);", content, re.DOTALL).group(1)
'green_main, yellow_main, red_main, green_first, yellow_first, \n red_first, clk, rst, waiting_main, waiting_first'

这里,module\w+\((.*?)\);表示

  • 单词 module 后跟一个空格和一些单词类型的 \w 字符
  • 文字开头(
  • 一个捕获组 (...) 包含任何 .,包括换行符 (re.DOTALL),非贪婪 *?
  • 文字结束);

group(1) 获取在(非转义)对 (...)

之间找到的内容

如果您希望将它们作为列表:

>>> list(map(str.strip, _.split(",")))
['green_main', 'yellow_main', 'red_main', 'green_first', 'yellow_first', 'red_first', 'clk', 'rst', 'waiting_main', 'waiting_first']

关于python - 如何在一行中搜索字符串并在python中提取两个字符之间的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com