在python中,如何使用正则表达式只记录我们从文件中读取的数据的字符串匹配部分?
In python, how to record only the matched part of the string using regex for data that we read from a file?
如何打印从文本文件读取的行中与正则表达式匹配的字符串的唯一部分。
我有以下代码。
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('^[A-Z]{1,2}\d{1,3} ')
with open(filename, "rt") as myfile:
for line in myfile:
if pattern.search(line) != None:
print(line, end='')
但这给了我包含匹配项的整行。
我尝试的另一件事是。
k = []
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('^[A-Z]{1,2}\d{1,3}')
with open(filename, "rt") as myfile:
for line in myfile:
if pattern.match(line) != None:
k.append(pattern.search(line))
但这是 re.Match 个对象而不是列表
[<re.Match object; span=(0, 3), match='NM4'>,
<re.Match object; span=(0, 3), match='NM3'>,
<re.Match object; span=(0, 2), match='M9'>,
<re.Match object; span=(0, 2), match='M7'>,
<re.Match object; span=(0, 2), match='M5'>,
<re.Match object; span=(0, 2), match='M2'>]
我的输入如下:
NM4 (net19 net19 0 0) nmos1 w=(5.65u) l=410n as=3.39p ad=3.39p ps=12.5u \
NM3 (net28 net19 0 0) nmos1 w=(5.65u) l=410n as=3.39p ad=3.39p ps=12.5u \
M9 (vout\+ net19 0 0) nmos1 w=(12.71u) l=310n as=7.626p ad=7.626p \
M7 (vout\- net19 0 0) nmos1 w=(12.71u) l=310n as=7.626p ad=7.626p \
M5 (net7 net19 0 0) nmos1 w=(2u) l=180n as=1.2p ad=1.2p ps=5.2u pd=5.2u \
M2 (net8 Vin\- net7 0) nmos1 w=(28.25u) l=410n as=16.95p ad=16.95p \
我希望我的回答看起来像:
[NM4 NM3 M9 M7 M5 M2]
使用正则表达式分组'([A-Z]{1,2}\d{1,3})'
例如:
k = []
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('([A-Z]{1,2}\d{1,3})')
with open(filename, "rt") as myfile:
for line in myfile:
m = pattern.match(line)
if m: #Check if data.
k.append(m.group(1)) #Fetch result.
print(k) #['NM4', 'NM3', 'M9', 'M7', 'M5', 'M2']
如何打印从文本文件读取的行中与正则表达式匹配的字符串的唯一部分。 我有以下代码。
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('^[A-Z]{1,2}\d{1,3} ')
with open(filename, "rt") as myfile:
for line in myfile:
if pattern.search(line) != None:
print(line, end='')
但这给了我包含匹配项的整行。
我尝试的另一件事是。
k = []
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('^[A-Z]{1,2}\d{1,3}')
with open(filename, "rt") as myfile:
for line in myfile:
if pattern.match(line) != None:
k.append(pattern.search(line))
但这是 re.Match 个对象而不是列表
[<re.Match object; span=(0, 3), match='NM4'>,
<re.Match object; span=(0, 3), match='NM3'>,
<re.Match object; span=(0, 2), match='M9'>,
<re.Match object; span=(0, 2), match='M7'>,
<re.Match object; span=(0, 2), match='M5'>,
<re.Match object; span=(0, 2), match='M2'>]
我的输入如下:
NM4 (net19 net19 0 0) nmos1 w=(5.65u) l=410n as=3.39p ad=3.39p ps=12.5u \
NM3 (net28 net19 0 0) nmos1 w=(5.65u) l=410n as=3.39p ad=3.39p ps=12.5u \
M9 (vout\+ net19 0 0) nmos1 w=(12.71u) l=310n as=7.626p ad=7.626p \
M7 (vout\- net19 0 0) nmos1 w=(12.71u) l=310n as=7.626p ad=7.626p \
M5 (net7 net19 0 0) nmos1 w=(2u) l=180n as=1.2p ad=1.2p ps=5.2u pd=5.2u \
M2 (net8 Vin\- net7 0) nmos1 w=(28.25u) l=410n as=16.95p ad=16.95p \
我希望我的回答看起来像:
[NM4 NM3 M9 M7 M5 M2]
使用正则表达式分组'([A-Z]{1,2}\d{1,3})'
例如:
k = []
filename = "C:/Users/Desktop/netlist"
pattern = re.compile('([A-Z]{1,2}\d{1,3})')
with open(filename, "rt") as myfile:
for line in myfile:
m = pattern.match(line)
if m: #Check if data.
k.append(m.group(1)) #Fetch result.
print(k) #['NM4', 'NM3', 'M9', 'M7', 'M5', 'M2']