Regex, чтобы найти A, а не B на линии - PullRequest
5 голосов
/ 10 апреля 2010

Я ищу регулярное выражение для поиска в моей программе на Python, чтобы найти все строки, где foo, но не bar, передается в метод в качестве аргумента ключевого слова. Я играю с предвзятыми утверждениями, но мне не везет.

Любая помощь?

Спасибо

Ответы [ 3 ]

10 голосов
/ 10 апреля 2010

Если у вас есть строка foo, которую вы хотите найти, и другая строка bar, которая не должна присутствовать, вы можете использовать это:

^(?!.*bar).*foo

Создание регулярного выражения, которое точно соответствует всем вашим требованиям, очень сложно, поскольку код Python не является обычным языком, но, надеюсь, вы сможете использовать его в качестве отправной точки, чтобы получить что-то подходящее для ваших нужд.

4 голосов
/ 10 апреля 2010

Имея ^ после , взгляды в этих сценариях всегда, кажется, работают лучше для меня. Чтение для меня тоже имеет смысл.

(?!.*bar)^.*foo

this has a foo          # pass
so does this has a foo  # pass
i can haz foo           # pass
but i haz foo and bar!  # fail
1 голос
/ 10 апреля 2010

Вы также можете сделать это без регулярного выражения:

for line in file:
    if "foo" in line and "bar" not in line:
        #do something
...