Регулярное выражение дополнительной проверки

44
4

Я работаю с регулярным выражением, которое проверяет строку, является ли она функцией или нет.
Мое регулярное выражение для проверки следующим образом:


regex=r' \w+[\ ]*\(.*?\)*'

Он успешно проверяет, содержит ли строка функцию или нет.
Но он захватывает нормальную строку, которая содержит значение первого знака, например "тест (значение теста)".


Поэтому я должен проверить, что если между именем функции и этими скобками есть пробел, который не будет пойман как совпадение. Итак, я сделал еще одну проверку следующим образом:


regex2=r'\s'

Он работает успешно и может различать "test()" и "test()".
Но теперь я должен поддерживать другое условие, что, если после скобок нет места (например, test() abcd), он не будет воспринимать его как функцию. Регулярное выражение должно рассматриваться только как совпадение, когда оно будет похоже на "test() abcd".
Но я пытался использовать разные регулярные выражения, к сожалению, они не работают.
Ее одно упоминание о контрольной строке вставляется в список, когда он находит совпадение, и на втором этапе он проверяет только часть строки. Пример:
String: это тест функции python() abcd
Сначала он проверит строку для функции и найдет совпадения с функцией test()
затем отправьте только "test()" для того, существует ли разрыв между "тестом" и "()".
На этом последнем этапе мне нужно найти промежуток между "test()" и "abcd". Если есть пробел, он не будет показывать совпадение как функцию иначе как нормальную часть строки.
Как написать регулярное выражение для такого случая?


Регулярное выражение должно появиться в следующих случаях:


1.test() abc
2.test(as) abc
3.test()

не будет рассматриваться как функция, если:


1.test (a)abc
2.test ()abc

спросил(а) 2010-11-21T07:59:00+03:00 9 лет назад
3
Решение
46

(\w+\([^)]*\))(\s+|$)

Баскиально убедитесь, что он заканчивается пробелами или концом строки.

Кстати, инструмент kiki очень полезен для отладки Python re: http://code.google.com/p/kiki-re/

ответил(а) 2010-11-21T10:00:00+03:00 9 лет назад
Еще 2 ответа
32



Сначала я решил проблему, я просто написал для строки, которая имеет "()", используя регулярное выражение:


regex = r' \w+[\ ]*\(.*?\)\w*'

Затем для проверки как пробела между именем функции и скобками, так и пробелом после скобок, я использовал следующую функцию с регулярным выражением:


       def testFunction(self, func):
a=" "
func=str(func).strip()
if a in func:
return False
else:
a = re.findall(r'\w+[\ ]*', func)
j = len(a)
if j<=1:
return True
else:
return False

Итак, теперь он может различать "test() abc" и "test() abc".

Благодаря

ответил(а) 2010-11-21T14:51:00+03:00 9 лет назад
33

regex=r'\w+\([\w,]+\)(?:\s+|$)'

ответил(а) 2010-11-21T08:03:00+03:00 9 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема