使用正则表达式

时间:2017-07-12 08:49:53

标签: regex python-3.x

我正在尝试读取包含以下几行的文件:

    <Property authority="Design" name="X">2538.0</Property>
    <Property authority="Design" name="Y">-226.084564</Property>
    <Property authority="Design" name="Z">393.511932</Property>
    <Property authority="Design" name="Diameter2">0.0</Property>
    <Property authority="Design" name="AssemblyID">WDLX6B-S11135-Y</Property>
    <Property authority="Design" name="AssemblyRev">55</Property>

我需要搜索/匹配“Y”(行号:2)才能提取值。我写了以下几行。

    for line in file:
        if re.findall("\\bY\\b", line):

            y_cor = re.findall('[-\d]+\.\d*',line)
            print (line)
            print(y_cor)

这样,代码选择第2行以及第5行,其中行中也有Y.输出如下:

    <Property authority="Design" name="Y">-226.084564</Property>

     ['-226.084564']
    <Property authority="Design" name="AssemblyID">WDLX6B-S11135-Y</Property>
     []

我只需要行号。 2被挑选。我已经尝试过跟随正则表达式。

    if re.findall(r' \\"Y\\" ',line):

但这是错误的语法。谁能建议我如何区分“Y”和Y?可能还有其他方法可以避免挑选第5行。但是我需要为X,Y和amp;制作通用代码。 Z,以便只挑选相应的行。感谢。

2 个答案:

答案 0 :(得分:0)

假设您想要以下输出:-226.084564 我可以构建一个简单的正则表达式:

="Y">(-?[0-9-\.]*)

此正则表达式仅匹配name =“Y”。为了使其区分大小写,我可以将其修改为="[Yy]">(-?[0-9-\.]*)

输出(在python中测试):

Match 1
1. -226.084564 

答案 1 :(得分:0)

以下正则表达式为我工作。

    re.findall('\\"Y\\"',line)

从现在开始,我会用 lxml 解析xml。