我有一个字符串,我试图创建一组只有逗号的项目。到目前为止,我能够创建一个组,我正在尝试做的是确保该字符串包含单词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追加到字符串的末尾,如果它不包含它的话。
寻找仅限正则表达式的解决方案(无功能)
答案 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'
答案 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']