python正则表达式逗号分隔组

时间:2014-09-23 13:47:02

标签: python regex

我有一个字符串,我试图创建一组只有逗号的项目。到目前为止,我能够创建一个组,我正在尝试做的是确保该字符串包含单词nodev。如果字符串不包含该单词,则应显示匹配,否则正则表达式不应与任何内容匹配。

字符串:

"/dev/mapper/ex_s-l_home /home  ext4    rw,exec,auto,nouser,async    1  2"

与逗号分隔的组匹配的正则表达式:

([\w,]+[,]+\w+)

我试过这个正则表达式,但没有运气:

(?!.*nodev)([\w,]+[,]+\w+)

我正在使用https://pythex.org/,我希望我的输出有一个包含“rw,exec,auto,nouser,async”的匹配项。这样我就计划将nodev追加到字符串的末尾,如果它不包含它的话。

寻找仅限正则表达式的解决方案(无功能)

2 个答案:

答案 0 :(得分:2)

>>> import re
>>> s = "/dev/mapper/ex_s-l_home /home  ext4    rw,exec,auto,nouser,async    1  2"
>>> s2 = "/dev/mapper/ex_s-l_home /home  ext4    rw,exec,auto,nodev,nouser,async    1  2"
>>> re.findall(r'(?<=\s)(?!.*nodev)(?=\S*,\S*)\S+', s)
['rw,exec,auto,nouser,async']
>>> re.findall(r'(?<=\s)(?!.*nodev)(?=\S*,\S*)\S+', s2)
[]

追加,nodev

>>> re.sub(r'(?<=\s)(?!.*nodev)(?=\S*,\S*)\S+', r'\g<0>,nodev', s)
'/dev/mapper/ex_s-l_home /home  ext4    rw,exec,auto,nouser,async,nodev    1  2'
>>> re.sub(r'(?<=\s)(?!.*nodev)(?=\S*,\S*)\S+', r'\g<0>,nodev', s2)
'/dev/mapper/ex_s-l_home /home  ext4    rw,exec,auto,nodev,nouser,async    1  2'

pythex demo

答案 1 :(得分:0)

完整的正则表达式解决方案。

为此,您需要导入regex模块。

>>> import regex
>>> s = " /dev/mapper/ex_s-l_home /home  ext4 rw,exec,auto,nouser,async    1  2 rw,exec,nodev,nouser,async    1  2 nodevfoo bar"
>>> m = regex.findall(r'(?<=^|\s)\b(?:(?!nodev)\w+(?:,(?:(?!nodev)\w)+)+)+\b(?=\s|$)', s)
>>> m
['rw,exec,auto,nouser,async']