Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Если вас интересует только первое вхождение слова, это легко сделать. Рассмотрим следующий пример
import re
txt = 'blah blah blah SELECT something SELECT something another SELECT'
output = re.sub(r'.*?(?=SELECT)','',txt,1)
print(output) #SELECT something SELECT something another SELECT
Я использовал так называемое утверждение нулевой длины внутри шаблона, поэтому оно совпадает, только если следуют SELECT
и я даю 1
в качестве 4-го re.sub
аргумента, означающего, что будет только 1 замена.
Можно использовать этот regex и замену пустой строкой:
^.+?(?=SELECT)
как это:
result = re.sub(r"^.+?(?=SELECT)", "", your_string)
Объяснение:
, поскольку Вы хотите удалить все, которое это перед первым SELECT
, матч собирается начаться в начале строки ^
. И затем Вы лениво соответствуете любому символу .+?
, пока Вы не видите SELECT
.
, С другой стороны, удаляют предвидение и замену SELECT
:
result = re.sub(r"^.+?SELECT", "SELECT", your_string)
РЕДАКТИРОВАНИЕ:
я нашел еще один способ сделать это, с [1 110] partition
:
partitions = your_string.partition("SELECT")
result = partitions[1] + partitions[2]