У меня есть база данных, которая содержит идентификатор, например
ID
000000000000000000000PBC_1164321
00000000000000000000000RP_395954
00000000000000000000000MOP_395954
00000000000000000000000395954
Я хочу получить только данные после ведущих 0 что-то вроде этого:
ID
PBC_1164321
RP_395954
MOP_395954
395954
Я тестирую его на https://regexr.com. Я пытался использовать ^(0*)
, но он выбирает все 0. Я хочу наоборот, не выбирать все начальные 0, а все после него. Пожалуйста, помогите.
Я не использую какой-либо язык, такой как Python и R. Просто хочу использовать регулярное выражение для выбора/сопоставления чего-либо, кроме ведущих 0
Вы можете попробовать это по ссылке, которую я использовал в вопросе. Не распознает "саб"
Там вам нужна ^0*
sub
функция R
.
@akrun ^ 0 * выбирает только 0, я хочу обратное. выбрать все после 0
Вы можете попробовать шаблон "^0*"
по вашей ссылке --- все, что делает эта ссылка, это сопоставление регулярных выражений. Возможно, вы захотите сделать много вещей с совпадениями регулярных выражений — извлечь их, извлечь всю строку, если есть совпадение, вернуть логическое значение, если есть совпадение, заменить совпадение и т. д. sub
— это функция R, которая заменяет (заменяет ) матч. Хороший способ удалить 0 — это заменить 0 ничем ""
. Это то, что предлагает Акрун.
Хситий, ты пробовал? sub("^0*", "", "00000000000000000000000MOP_395954")
возвращает "MOP_395954"
именно то, что вы просили.
Как я могу сделать это без использования каких-либо функций Python или R, таких как «sub» и «Replace». Использовать только регулярное выражение для всего этого? Является ли это возможным?
Regex просто соответствует. Это ничего не делать с совпадением. Вы хотите что-то сделать, поэтому вам нужно больше, чем просто регулярное выражение.
([^0].*)
должно работать на вас @KshitijYadav
@Грегор, все в порядке, как я могу сопоставить что-либо, кроме ведущих нулей. я на самом деле только этого и хочу
Хситий, ладно, справедливый вопрос. Где вы пытаетесь это сделать? Без R, Python или другого языка программирования вы можете сделать это в notepad
или на листе бумаги ... что, очевидно, является сарказмом, и потому что я не знаю большего контекста.
@CodelessBugging это отлично. Пожалуйста, ответьте на это, я проголосую и закрою этот вопрос.
@Toto, пожалуйста, прочитайте остальные комментарии, прежде чем закрыть это как обман. ОП специально спрашивал о том, чтобы сделать это без python/R, и хотя мне не ясно, что это значит, он предполагает, что необходимы дополнительные подробности, прежде чем узнать, что это дубликат.
@KshitijYadav круто, рад, что смог помочь, но, похоже, я не могу ответить, пока вопрос больше не будет помечен как обман
@CodelessBugging, я не думаю, что это дублирующий вопрос. как я могу снять отметку об этом? Есть идеи?
Окей, сделано. Но комментарий о том, что они не используют R или Python, был сказан после того, как я закрыл
@Тото Конечно. Спасибо.
@CodelessBugging, пожалуйста, напишите ответ :)
@Toto, спасибо за повторное открытие. Для протокола: «без использования каких-либо функций Python или R» в 15:30:49Z, ваше закрытие было в 15:32:26Z. Возможно, ему потребовалась минута или около того, чтобы зарегистрироваться на странице... да, это случается со мной часто.
Вы можете сопоставить текст после ведущих нулей, используя ([^0].*)
Использование /[A-Z1-9].*/gi
[A-Z1-9] будет соответствовать любому символу в A-Z 1-9, по сути, не 0, точка соответствует любому символу, а звезда соответствует ему 0 или более раз. Теги совпадают глобально и нечувствительны к регистру.
Сначала я попытался найти решение, похожее на @Codelessbugging, но не смог заставить сайт обработать его правильно.
Ссылка на это решение
Ссылка на решение CodelessBugging
Я думаю, что без кода и ваши оба правы. Поскольку программное обеспечение, которое я использую, выполняет интерпретацию по одной строке за раз, оно смогло проанализировать ее с тем, что было представлено без кода.
Попробуйте с
sub
. Вы можете указать начало строки (^
), за которым следует 0 или более нулей, и заменить его на""
,sub(^0*", "", df1$ID)