简体   繁体   English

查找两个字符之间的正则表达式

[英]Find a regular expression in between two characters

I have a txt file which contains the following line. 我有一个txt文件,其中包含以下行。

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

How can I extract FILENAME from the above using regular expressions So far I have tried (in my python script): 如何使用正则表达式从上面提取FILENAME到目前为止,我已经尝试过(在我的python脚本中):

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

This gives an output of: 输出为:

keyvalue="FILENAME">

but I only want to output: 但我只想输出:

FILENAME

What is the regular expression I need? 我需要什么正则表达式?

Change your regex to, 将您的正则表达式更改为

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

Example: 例:

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

OR 要么

Use BeautifulSoup. 使用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'

Another pattern to try: 尝试的另一种模式:

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

Try following regex. 尝试遵循正则表达式。 I'm using lookbehind feature.: 我正在使用后向功能。:

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

Your code should look like: 您的代码应如下所示:

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

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

If match is successful, it should print FILENAME . 如果匹配成功,则应打印FILENAME

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM