1

我正在编写一个 Python 脚本,它逐行读取文件并搜索任何语法行var_name = value。如果找到一个,它会将变量设置为该行namevalue的值。这是我到目前为止所拥有的:

import re

for i in file:
  name = ""
  value = ""
  if re.match('^[A-Za-z0-9]*[\\s]?\=[\\s]?.*$', x):
    #operations to set variables needed here...
    #then use new variables

问题是我在 Linux 环境中学习了正则表达式,而 Python 似乎有很多与之相关的不同规则和函数。我对 Python 还是很陌生,所以试图弄清楚这一点相当令人困惑。我一直在四处寻找,并在检查正则表达式匹配时找到了合理的数量,但是一旦找到所述匹配项,就无法提取匹配的值。我试过这样的事情:

name = re.search(' (?=[\\s]?\=.*)', x)
value = re.search(' (?<=[A-Za-z0-9]*[\\s]?\=[\\s]?) ', x)

...根据我在此处找到的内容,但它不起作用,而且我不确定操作的哪一部分不正确。如果有人有任何想法可以分享,将不胜感激。谢谢!

4

2 回答 2

2

re.search()re.match()函数返回一个MatchObjectNone- 您应该首先检查它是否返回 smth,然后使用,group()或任何适合获取实际提取或找到的方法:groups()groupdict()

match = re.search(pattern, string)
if match:
    variable = match.group(<number>)
于 2013-09-05T14:00:05.203 回答
1

(?P<name>...)您可以使用内部正则表达式来获取符号组名称,而不是使用变量:

类似于正则括号,但组匹配的子字符串可通过符号组名在正则表达式的其余部分中访问name

例子:

>>> import re
>>> strs = "foo = bar"
>>> m = re.search(r'(?P<name>^\w+\s*)\=(?P<value>\s*(.*?)$)', strs)
>>> m.groupdict()
{'name': 'foo ', 'value': ' bar'}
于 2013-09-05T14:01:03.927 回答