Как удалить строку с конкретным шаблоном, не используя REGEX? - PullRequest
0 голосов
/ 06 октября 2018

У меня трудные времена с этими наборами входов и выходов:

input: so sh [/] she had a [^ wheee] .
output: so sh [/] she had a .

input: aah [!] [^ makes sound effects] .
output: aah.

input: and she say (.) I got it [^ repeats 2 times] .
output: and she say (.) I got it .

input: oh no[x 3] .
output: oh  no.


input: xxx [^ /bosolasafiso/]
output: xxx

input: hi [* med]
oupt: hi [* med]

Я использовал REGEX, но бесполезно, мне нужны точные условия, чтобы все это удовлетворяло, и полученный результат должен быть возвращен,

Все «ВХОДЫ» читаются из файла, поэтому обратите внимание, что даже если я использую «split ()», такие слова, как [^ whee], будут рассматриваться как два разных слова.

Мне нужно условие, при котором должны быть сохранены только слова, содержащие [/] [*.другие слова, начинающиеся с «[», должны быть заменены пустой строкой.

1 Ответ

0 голосов
/ 06 октября 2018

Следующее решение работает, предполагая, что в исходном тексте есть нет фигурных скобок.В противном случае используйте другую пару разделителей (например, << и >>).

s1 = 'so sh [/] [* med] she had a [^ wheee] .' 

Сначала замените [ и ] в каждом фрагменте [/ X] или [* X] на{ и } соответственно, чтобы защитить их от уничтожения.Затем удалите все оставшиеся фрагменты в квадратных скобках.Наконец, замените все фигурные скобки на квадратные скобки:

re.sub(r"\[[^]]*]", "", # Remove [Y] blocks
        re.sub(r"\[([/*][^]]*)]", r"{\1}", s1)) # Rename [X] to {X}\
  .replace("{", "[") # Restore the original brackets\
  .replace("}", "]")
#'so sh [/] [* med] she had a  .'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...