Как заменить оператор стрелки (->) на оператор точки (.) В строке - PullRequest
1 голос
/ 30 мая 2020

У меня есть такая строка

s = '''int t; //variable t
t->a=0;  //t->a does;; something
printf("\nEnter the Employee ID : ");
scanf("%d", ptrx->eid);  //employee id ptrx->eid
printf("\nEnter the Employee Name : ");
scanf("%s", ptr->name);
return 0;'''

Я хочу заменить -> this на . в строке выше. Но эту замену не следует делать внутри комментариев. Комментарий - это строка, которая начинается с // и заканчивается в конце строки.

Я пробовал использовать приведенный ниже код. Есть ли способ решить эту проблему с помощью одного регулярного выражения.

Код

import re

for line in s.split('\n'):
    code = re.findall('^(?:(?!\/\/.+$).)*', line)
    comment = re.findall('\/\/.+$', line)
    print(''.join(code).replace('->', '.') + ''.join(comment))

Ожидаемый результат:

int t; //variable t
t.a=0;  //t->a does;; something
printf("
Enter the Employee ID : ");
scanf("%d", ptrx.eid);  //employee id ptrx->eid
printf("
Enter the Employee Name : ");
scanf("%s", ptr.name);
return 0;

1 Ответ

2 голосов
/ 30 мая 2020

Использование библиотеки regex , которая допускает просмотр назад переменной длины, позволяет следующее.

>>> s = '''int t; //variable t
t->a=0;  //t->a does;; something
printf("\nEnter the Employee ID : ");
scanf("%d", ptrx->eid);  //employee id ptrx->eid
printf("\nEnter the Employee Name : ");
scanf("%s", ptr->name);
return 0;'''.splitlines()


>>> import regex
>>> for line in s:
    n = regex.sub(r'(?<!//.+)->', '.', line)
    print(n)


int t; //variable t
t.a=0;  //t->a does;; something
printf("
Enter the Employee ID : ");
scanf("%d", ptrx.eid);  //employee id ptrx->eid
printf("
Enter the Employee Name : ");
scanf("%s", ptr.name);
return 0;
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...