使用正则表达式我需要过滤以下随机输入:
<_io.TextIOWrapper name='C:/Python34/abcd.txt' mode='w' encoding='cp1252'>
到
C:/Python34/abcd.txt
如何在正则表达式中获取所选部分?
答案 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')