Python re:如何匹配空格或字符串中没有整数?

时间:2017-06-09 17:34:19

标签: python

我的文件中包含这样的行。

<play locationId="83" touchscreen="false" primary="">

其中一些中有一个整数,其中一些不是。我可以正确搜索整数。

如何搜索缺失的整数? 有些配置看起来像:

<play locationId="" touchscreen="false" primary="">

<play locationId=" " touchscreen="false" primary="">

我想取空白点并在其中加一个整数。

这不起作用:

sys.stdout.write(re.sub(r'(locationID=)"', r'\1"' + mynewnumber, line))

更新 这是我的完整代码。我正致力于“其他”工作。声明,但我认为&#39; if&#39;不让我搜索空间并正确替换。

def changeid():

    source = "myfile.config"
    newtext = str(results[1])
    with fileinput.FileInput(source, inplace=True, backup='.bak') as file:
        for line in file:
            pattern = r'(?<=locationId=").([^"]+)'  # find 1 or more digits that come
                                              # after the string locationid     
            if re.search(pattern, line):
                sys.stdout.write(re.sub(pattern, newtext, line)) # adds number after locationid
                fileinput.close()
            else:
                sys.stdout.write(re.sub(r'(locationID=)"', r'\1"' + newtext, line)) # use sys.stdout.write instead of "print"
                # using re module to format                                                              
                # adds a location id number after locationid even if there was no number originally there        
                fileinput.close()

changeid()

1 个答案:

答案 0 :(得分:1)

<space>?将匹配空格

\d+将匹配数字序列

所以让我们把它们结合起来: locationId="(\d+| ?)

或者,我们可以找到任何不是引号的东西: locationId="[^"]+

把它放在一起:

line = '<play locationId="83" touchscreen="false" primary="">'
sys.stdout.write(re.sub('locationId="[^"]+', 'locationId="{}'.format(mynumber), line))