在两个字符

时间:2016-03-31 12:40:17

标签: python regex

我有一个包含以下行的txt文件。

<KEY key="Spread" keyvalue="FILENAME">

如何使用正则表达式从上面提取FILENAME 到目前为止,我已经尝试过(在我的python脚本中):

if '"Spread" keyvalue' in line:
    n = re.search(r'\keyvalue="(.*)', line)
    name = n.group()
    print name

这给出了输出:

keyvalue="FILENAME">

但我只想输出:

FILENAME

我需要的正则表达式是什么?

3 个答案:

答案 0 :(得分:1)

将正则表达式更改为,

n = re.search(r'\bkeyvalue="(.*?)"', line)
name = n.group(1)

示例:

>>> import re
>>> s = '''<KEY key="Spread" keyvalue="FILENAME">'''
>>> n = re.search(r'\bkeyvalue="(.*?)"', s)
>>> n.group(1)
'FILENAME'
>>> 

OR

使用BeautifulSoup。

>>> from bs4 import BeautifulSoup
>>> xml = '''<KEY key="Spread" keyvalue="FILENAME">'''
>>> soup = BeautifulSoup(xml, 'lxml')
>>> s = soup.find('key', attrs={'key':'Spread'})
>>> s.get('keyvalue', None)
'FILENAME'

答案 1 :(得分:0)

另一种尝试模式:

>>> line = '<KEY key="Spread" keyvalue="FILENAME">'
>>> re.findall('\s+keyvalue=\"([^"]+)\"', line)
['FILENAME']

答案 2 :(得分:0)

试试以下正则表达式。我正在使用lookbehind功能。:

(?<=keyvalue=\").*?(?=\")

您的代码应如下所示:

line = '<KEY key="Spread" keyvalue="FILENAME">'

match = re.search(r"(?<=keyvalue=\").*?(?=\")", line, re.MULTILINE)
if match:
    result = match.group()
    print(result)

如果匹配成功,则应打印FILENAME