Замените «-» пробелом, если следующий символ является буквой, а не цифрой, и удалите, когда он находится в начале

У меня есть список строк, т.е.

slist = ["-args", "-111111", "20-args", "20 - 20", "20-10", "args-deep"]

Я хочу удалить «-» из строки, где это первый символ, за которым следуют строки, но не числа или если перед «-» есть число/алфавит, но после него алфавиты, тогда он должен заменить «-» пробелом

Итак, для списка список я хочу, чтобы вывод был как

["args", "-111111", "20 args", "20 - 20", "20-10", "args deep"]

я пытался

slist = ["-args", "-111111", "20-args", "20 - 20", "20-10", "args-deep"]
nlist = list()
for estr in slist:
    nlist.append(re.sub("((^-[a-zA-Z])|([0-9]*-[a-zA-Z]))", "", estr))
print (nlist)

и я получаю вывод

['rgs', '-111111', 'rgs', '20 - 20', '20-10', 'argseep']

Попробуйте nlist.append(re.sub(r"-(?=[a-zA-Z])", " ", estr).strip()). Я не думаю, что где это первый символ является фактическим требованием, судя по ожидаемому результату.

Wiktor Stribiżew 22.05.2019 15:01

Обратите внимание, что «алфавит» — это индийский английский. Общий английский термин - «письмо».

wjandrea 22.05.2019 15:19

Аргья, у тебя было время проверить мой подход?

Wiktor Stribiżew 23.05.2019 09:15

спасибо всем за ответы @WiktorStribiżew мне просто нужно заменить символ пробелом, если это не первый символ, поэтому, если это первый символ, то полоса удаляет это, так что это не фактическое требование

Arghya Sarkar 26.05.2019 18:18

Итак, я изменил заголовок и разместил Ответ с пояснениями.

Wiktor Stribiżew 26.05.2019 21:36
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
5
239
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Здесь мы можем просто захватить первую букву после начального -, а затем заменить ее только этой буквой, возможно, выражением флага i, похожим на:

^-([a-z])

ДЕМО

enter image description here

Тестовое задание

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"^-([a-z])"

test_str = ("-args\n"
    "-111111\n"
    "20-args\n"
    "20 - 20\n"
    "20-10\n"
    "args-deep")

subst = "\\1"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE | re.IGNORECASE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

Демо

const regex = /^-([a-z])/gmi;
const str = `-args
-111111
20-args
20 - 20
20-10
args-deep`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

регулярное выражение

Если это выражение не нужно, его можно изменить или изменить в regex101.com.

Цепь регулярных выражений

jex.im визуализирует регулярные выражения:

enter image description here

Одним из вариантов может быть замена 2 раза. Сначала сопоставьте дефис в начале, когда следуют только алфавиты:

^-(?=[a-zA-Z]+$)

Демонстрация регулярных выражений

В замене используйте пустую строку.

Затем захватить 1 или более раз алфавит или цифру в группе 1, сопоставить -, а затем захватить 1+ раз алфавит в группе 2.

^([a-zA-Z0-9]+)-([a-zA-Z]+)$

Демонстрация регулярных выражений

В замене используйте r"\1 \2"

Например

import re

regex1 = r"^-(?=[a-zA-Z]+$)"
regex2 = r"^([a-zA-Z0-9]+)-([a-zA-Z]+)$"

slist = ["-args", "-111111", "20-args", "20 - 20", "20-10", "args-deep"]
slist = list(map(lambda s: re.sub(regex2, r"\1 \2", re.sub(regex1, "", s)), slist))

print(slist)

Результат

['args', '-111111', '20 args', '20 - 20', '20-10', 'args deep']

демонстрация Python

Ответ принят как подходящий

Вы можете использовать

nlist.append(re.sub(r"-(?=[a-zA-Z])", " ", estr).lstrip())

или

nlist.append(re.sub(r"-(?=[^\W\d_])", " ", estr).lstrip())

Результат: ['args', '-111111', '20 args', '20 - 20', '20-10', 'args deep']

См. демонстрация Python.

Шаблон -(?=[a-zA-Z]) соответствует дефису перед буквой ASCII (-(?=[^\W\d_]) соответствует дефису перед любой буквой) и заменяет совпадение пробелом. Поскольку - может совпадать с началом строки, в этой позиции может появиться пробел, поэтому .lstrip() используется для удаления пробела(ов).

Другие вопросы по теме