从字符串中查找并提取两个子字符串

时间:2015-03-20 09:54:59

标签: python regex string

我有一些字符串(实际上它们是从文件中读取的行)。这些行只是复制到其他文件中,但其中一些是"特殊的"需要不同的待遇。

这些行具有以下语法:

someText[SUBSTRING1=SUBSTRING2]someMoreText

所以,我想要的是:当我有一条线,这个"掩盖"可以应用,我想将SUBSTRING1SUBSTRING2存储到变量中。大括号和=将被剥离。

我想这包括几个任务:

  1. 确定一行是否包含此掩码
  2. 如果是,请获取子串的位置
  3. 提取子字符串
  4. 我确定这是一个简单的正则表达式任务,但是,我不习惯它。我可以使用字符串操作编写一个巨大的怪物函数,但我想这不是" Python方式"这样做。

    对此有何建议?

2 个答案:

答案 0 :(得分:0)

re.search()如果找不到匹配则会返回None\w与字母数字匹配,+表示1或更多。括号表示捕获组。

s = """
bla bla
someText[SUBSTRING1=SUBSTRING2]someMoreText"""

results = {}
for line_num, line in enumerate(s.split('\n')):

    m = re.search(r'\[(\w+)=(\w+)\]', line)
    if m:
        results.update({line_num: {'first': m.group(0), 'second': m.group(1)}})

print(results)

答案 1 :(得分:-1)

^[^\[\]]*\[([^\]\[=]*)=([^\]\[=]*)\][^\]\[]*$

你可以试试这个。Group 1Group 2有你想要的两个字符串。参见演示。

https://regex101.com/r/pT4tM5/26

import re
p = re.compile(r'^[^\[\]]*\[([^\]\[=]*)=([^\]\[=]*)\][^\]\[]*$', re.MULTILINE)
test_str = "someText[SUBSTRING1=SUBSTRING2]someMoreText\nsomeText[SUBSTRING1=SUBSTRING2someMoreText\nsomeText[SUBSTRING1=SUBSTRING2]someMoreText"

re.findall(p, test_str)