Python Regex: заменить несколько вариантов подстроки - PullRequest
0 голосов
/ 27 мая 2020

Я хочу удалить индикатор типа Fig 1. в строке caption, где caption может быть:

# each line is one instance of caption
"Figure 1: Path of Reading Materials from the Web to a Student."
"FIGURE 1 - Travel CP-net"
"Figure 1 Interpretation as abduction, the big picture."
"Fig. 1. The feature vector components"
"Fig 1: IMAGACT Log-in Page"
"FIG 1 ; The effect of descriptive and interpretive information, and Inclination o f Fit"
...

Я пробовал caption = re.sub(r'figure 1: |fig. 1 |figure 1 -', '', caption, flags=re.IGNORECASE), но это выглядит беспорядочно: я действительно нужно перечислить все возможности вручную? Есть ли какой-нибудь код элемента, который бы соответствовал всем им?

Большое спасибо!

1 Ответ

1 голос
/ 27 мая 2020

Вы можете использовать необязательную часть для сопоставления ure и использовать необязательный класс символов для сопоставления :, ., ; или -

Если вы хотите сопоставить другие цифр, чем 1, используйте \d+

\bfig\.?(?:ure)? 1[^\S\r\n]*[:.;–-]?
  • \bfig Сопоставьте фигу с границей слова
  • \.? Сопоставьте необязательную точку
  • (?:ure)? Необязательно: ure
  • 1 Сопоставить пробел и 1
  • [^\S\r\n]* Сопоставить 0+ пробелов, кроме символов новой строки
  • [:.;–-]? Необязательно сопоставить любой из перечисленных в классе символов

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

Пример кода для соответствия пробелу после класса символа:

caption = re.sub(r'\bfig\.?(?:ure)? 1[^\S\r\n]*[:.;–-]?[^\S\r\n]', '', caption, flags=re.IGNORECASE)
...