python正则表达式删除并获取所需的字符串

时间:2014-08-06 18:27:18

标签: python regex

使用正则表达式我需要过滤以下随机输入:

<_io.TextIOWrapper name='C:/Python34/abcd.txt' mode='w' encoding='cp1252'>

C:/Python34/abcd.txt

如何在正则表达式中获取所选部分?

3 个答案:

答案 0 :(得分:1)

如果您需要使用正则表达式执行此操作,可以使用以下内容:

>>> import re
>>> s = "<_io.TextIOWrapper name='C:/Python34/abcd.txt' mode='w' encoding='cp1252'>"
>>> re.search(r"<[^>]*\bname='([^']*)", s).group(1)
'C:/Python34/abcd.txt'

<强>解释

这匹配一个开始括号,一切都达到name并捕获单引号内的内容。单词边界\b不消耗任何字符,它声称一方有单词字符,而另一方则没有。

<         # '<'
[^>]*     # any character except: '>' (0 or more times)
\b        # the boundary between a word character (\w) and not a word character
name='    # 'name=\''
(         # group and capture to \1:
  [^']*   #   any character except: ''' (0 or more times)
)         # end of \1

答案 1 :(得分:0)

你也可以使用lookbehind。它匹配到name='之后的字符串,直到下一个'符号。

>>> import re
>>> s = "<_io.TextIOWrapper name='C:/Python34/abcd.txt' mode='w' encoding='cp1252'>"
>>> m = re.search(r"(?<=name=\')[^\']*", s)
>>> m
<_sre.SRE_Match object at 0x7fa131e6f370>
>>> m.group()
'C:/Python34/abcd.txt'

答案 2 :(得分:-1)

我觉得这不是随机的,但是你走了:

import re
string = "<_io.TextIOWrapper name='C:/Python34/abcd.txt' mode='w' encoding='cp1252'>"
regexString = r'<\S+ \s+ name=\'(?P<name>.*?)\'.*?>'
regex       = re.compile(regexString, re.X)
match       = regex.match(string)
if match != None:
    myName = match.group('name')