RegEx: игнорирование только символов, которые соответствуют как опережающему, так и обратному просмотру - PullRequest
2 голосов
/ 06 августа 2020

Я пытаюсь разобрать файл в Ruby, чтобы сделать его действительным JSON. Он использует одинарные кавычки, поэтому мне нужно их заменить.

Но он также использует одинарные кавычки как притяжательные в словах. Я пытаюсь использовать регулярное выражение, чтобы получить только одинарные кавычки, у которых нет буквы до И буквы после, но то, что у меня есть до сих пор, игнорирует что-либо с буквой до ИЛИ буквой после.

RegEx (?<![a-zA-Z])'(?![a-zA-Z])

Тестовая строка 'id': '4da7680f-3449-303f-8e79-d2abe665cbe9', 'phone_numbers': ['4108286112']}]}, {'email': None, 'gender': '', 'first_name': None, 'id': 1659439495, 'last_name': None, 'middle_name': None, 'network_ids': [100494], 'organization_name': "CHARLOTTE'S HAIR LINE INC.", 'phone': '4109334800'

Ссылка: https://rubular.com/r/MDthi9TWEvLOip

1 Ответ

1 голос
/ 06 августа 2020

Вы можете использовать следующий шаблон:

'(?!(?<=[a-zA-Z]')[a-zA-Z])

См. Rubular demo

Подробности

  • ' - одинарная кавычка
  • (?!(?<=[a-zA-Z]')[a-zA-Z]) - отрицательный просмотр вперед, при котором не удается найти соответствие, если сразу справа от текущего местоположения (после ') стоит
    • (?<=[a-zA-Z]') - (соответствие с положительным ретроспективным просмотром) местоположение, которому непосредственно предшествует буква ASCII и '
    • [a-zA-Z] - буква ASCII.
...