【问题标题】:Check two conditions in line检查两个条件
【发布时间】:2021-06-29 15:51:54
【问题描述】:

我有以下几行,我想匹配第一行,条件是它以“%”开头并包含“=”符号:

% This comment is = True

% This comment is equal true

我想使用python的re模块来提取第一句,因为它以%开头并包含=

到目前为止,我已经收集到我需要类似的东西:

...
if re.match('^%' ,line):
    ...

但无法弄清楚其余部分。谢谢!

【问题讨论】:

  • 试试^%.*=
  • 这很琐碎,你需要阅读正则表达式教程。
  • 试试 r'^%.*=.*' ?
  • %=应该有效还是无效?
  • @MonkeyZeus 为什么要先行而不是正常匹配?

标签: python regex string


【解决方案1】:

你真的不需要正则表达式:

if line[0] == '%' and '=' in line:

if line.startswith('%') and '=' in line:

话虽如此,您可以像这样使用正则表达式:

if re.match('%.*='):

或者更好:

pattern = re.compile('%.*=')

...

if pattern.match(line):

re.match 已经暗示您的正则表达式以 ^ 开头。

如果您不想允许%=,您仍然不需要正则表达式,但使用它会更简单一些。如果没有正则表达式,您可以执行类似的操作

if line[0] == '%' and line[1] != '=' and '=' in line[2:]:

使用正则表达式,你可以做到

if re.match('%[^=]+=', line):

我认为第二种更优雅。

【讨论】:

  • 我会接受的。谢谢。我同意,不需要正则表达式,但我仍然必须在这里知道它。那么,你是说 '^' 字符对于 re.match 是多余的,并且已经被考虑到了吗?
  • @Mad Physicist - 非常感谢您的精彩回答!
  • @dawg。我做到了。见帖子的中间(曾经是结尾)。特别是“re.match 已经暗示您的正则表达式以 ^ 开头。”
  • @user1029384756。我链接到文档,以便您验证。
  • '%.*=''%[^=]+=' 之间的区别值得注意。第二个将匹配 \n 而第一个不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2016-02-25
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多