2010-11-21 5 views
1

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

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

Он succefully проверяет, содержит ли строка функции или нет. Но он захватывает нормальную строку, содержащую значение fisher barcket, например «test (значение теста)».

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

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 
+0

Вы пытаетесь совместить функции python? Если да, пытаетесь ли вы выполнить определение или вызов? – aaronasterling

+0

Нет, я пытаюсь совместить в основном функцию стиля C, а регулярное выражение соответствует всем типам функции. Функция и функция вызова. – mushfiq

ответ

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

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

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

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

Я пробовал с регулярным выражением = r '\ w + \ s + \\ ([\ w,] +? \\) \ s +', но он не может уловить функцию function() " – mushfiq

+0

пробел после' test' теперь является необязательным – user514868

+0

на самом деле он должен найти совпадение в случаях: function test(), test(), test (a), test (a) aas, не должен ловить test(), test() asa. – mushfiq

0


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

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».
Thanks