2014-09-23 3 views
0

У меня есть строка, в которой я пытаюсь создать группу только элементов с запятыми. Пока я могу создать группу, то, что я пытаюсь сделать, это убедиться, что строка содержит слово nodev. Если строка не содержит этого слова, должно отображаться совпадение, иначе регулярное выражение не должно совпадать.python regex разделенная запятой группа

Строка:

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

Regex, который соответствует запятая разделителями группе:

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

Я попытался это регулярное выражение, но не повезло:

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

Я использую https://pythex.org/, и я ожидаю, что мой вывод будет иметь одно совпадение, содержащее «rw, exec, auto, nouser, async». Таким образом, я планирую добавить, nodev в конец строки, если он не содержит его. не

Ищет регулярное выражение единственным решения (без функции)

+0

Каков ваш ожидаемый результат? –

+0

Я использую https://pythex.org/ и ожидаю, что мой вывод будет иметь одно совпадение, содержащее «rw, exec, auto, nouser, async» –

+0

Не 'string.split() [3]' достаточно ? – falsetru

ответ

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

+0

Я думаю, что это не сработает, если оба разделенных запятыми значения присутствуют в пределах одной строковой переменной. –

+0

@ AvinashRaj, я думаю, что строка взята из ['fstab'] (http://en.wikipedia.org/wiki/Fstab). Таким образом, у него будет одно поле параметров ('rw, exec, auto, nouser, async') в строке. – falsetru

+0

Демо-версия pythex была чрезвычайно полезна, спасибо! –

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'] 
Смежные вопросы