Python Regex - замена не буквенно-цифровых символов и пробелов тире - PullRequest
1 голос
/ 21 сентября 2019

Я пытаюсь заменить все не алфавитно-цифровые символы И пробелы в следующей строке Python тире -.Я попытался использовать приведенный ниже код, но он заменил не алфавитно-цифровые символы тире -, а не пробелами.

s = re.sub('[^0-9a-zA-Z]+', '-', s)

Исходная строка: s = 'ABCDE : CE ; CUSTOMER : Account Number; New Sales'

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

Целевой результат: s = 'ABCDE---CE---CUSTOMER---Account-Number--New-Sales'

Ответы [ 5 ]

1 голос
/ 21 сентября 2019

Без re:

s = 'ABCDE : CE ; CUSTOMER : Account Number; New Sales'

''.join(x if x.isalnum() else '-' for x in s)

Вывод:

'ABCDE---CE---CUSTOMER---Account-Number--New-Sales'
1 голос
/ 21 сентября 2019

Я вижу, что пробелы переведены правильно, но ваше регулярное выражение должно пропустить +

import re
s = 'ABCDE : CE ; CUSTOMER : Account Number; New Sales'
re.sub('[^0-9a-zA-Z]+', '-', s)

Я на моем телефоне, но вставка в https://repl.it/languages/python3 дает мне

ABCDE-CE-CUSTOMER-Account-Number-New-Sales

как и положено - пробелы переведены.

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

import re
s = 'ABCDE : CE ; CUSTOMER : Account Number; New Sales'
re.sub('[^0-9a-zA-Z]', '-', s)

Дает

ABCDE---CE---CUSTOMER---Account-Number--New-Sales
1 голос
/ 21 сентября 2019

Вы были очень близко .Вам просто не нужно +, потому что тогда это заменит несколько вхождений всего одним штрихом.

Вам необходимо:

re.sub('[^0-9a-zA-Z]', '-', s)

Пример :

import re

s = 'ABCDE : CE ; CUSTOMER : Account Number; New Sales'

print(re.sub('[^0-9a-zA-Z]', '-', s))
# ABCDE---CE---CUSTOMER---Account-Number--New-Sales
0 голосов
/ 21 сентября 2019

Вы можете использовать [\W_]:

import re
d = re.sub('[\W_]', '-', s)

Выход:

'ABCDE---CE---CUSTOMER---Account-Number--New-Sales'
0 голосов
/ 21 сентября 2019
import re
s='ABCDE : CE ; CUSTOMER : Account Number; New Sales'
s = re.sub(r'\W', '-', s)

Надеюсь, это поможет.

С уважением, Адитья Шукла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...