python - 如何在一行中搜索字符串并在python中的两个字符之间提取数据?
问题描述
文件内容:
module traffic(
green_main, yellow_main, red_main, green_first, yellow_first,
red_first, clk, rst, waiting_main, waiting_first
);
我需要搜索字符串“模块”,并且需要提取 (.......); 之间的内容;括号。
这是我尝试过的代码,我无法得到结果
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
实际上不是一行,而是该字符串中的单个字符,显然永远不能包含 substring "module"
。
由于您实际上从未在循环内使用过line
,您只需删除循环和条件,您的代码就可以正常工作。(如果您将代码更改为实际循环行,并且find
在这些行内,它将不起作用,因为(
and)
不在同一行上。)
或者,您可以使用正则表达式:
>>> 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']
推荐阅读
- batch-file - 批处理文件路径警告消息
- java - Maven 默认 arhcetype:jersey-qucikstart-webapp 无法运行 webapp - [致命错误]:3:6:
- swift - 快速字典自动更改元素的顺序[Swift]
- python - Pycharm 无法解释行为
- c# - 删除用户控件时 WPF Stackpanel 高度未调整大小
- java - 在 Spring-boot 中路由 websocket 目标
- ruby-on-rails - 使用 watir 中的 firefox webdrivers 以状态 1 意外关闭进程(ruby on rails)
- xml - XQuery 如何将具有唯一标识符的类似 XML 结构中的值相加
- java - 主题错误 - 如何修复?
- python - 在 TensorFlow 中手动初始化 conv1d