Считайте файл, содержащий данные, и напечатайте значения 10 символов до и после в новый файл, если найдена строка "john" - PullRequest
1 голос
/ 01 июля 2019

Мне нужно напечатать 10 символов до и после строки "john", всякий раз, когда встречается "john".Даже если в следующей строке печатается половина букв, она все равно должна печатать 10 символов до и после.

Я пытался использовать функцию .contains и индекс строки, но проблема возникает, когда я вводю файлкак это:

Hello my name is jo
hn and i work for bla bla.

Что я пробовал:

(ns clojure-assignment.problem6
  (:use [clojure.string :only [index-of]]))

(defn String_manipulation []
  (def str1 (slurp "string.txt"))
  (println str1)
  (def check (.contains str1 "john"))
  (if (= check true)
    (def index (index-of str1 "john")))    
  (println (subs str1 (- index 11) index))
  (println (subs str1 (+ index 4) (+ index  5 10))))

(String_manipulation)

Я ожидаю, что вывод будет выводить значения 10 символов до и после заданной строки, и это также должно работать, если есть строкаконец.

1 Ответ

0 голосов
/ 01 июля 2019

Вы можете использовать это:

(def s "Hello my name is jo
hn and i work for bla bla.
")

(re-seq #".{10}john.{10}" (str/replace s #"\n" ""))
;; => ("y name is john and i wor")

ОБНОВЛЕНИЕ 1 - перекрывающийся паттерн

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

(def s "hello my name is john-john and john is my father's name")

(re-seq #"(?=(.{10}john.{10}))" (str/replace s #"\n" ""))

(["" "y name is john-john and "]
 ["" "e is john-john and john "]
 ["" "-john and john is my fat"])

ОБНОВЛЕНИЕ 2 - печать префикса и суффиксной группы совпадений

(use 'clojure.pprint)

(def s "Hello my name is jo
hn and i work for bla bla.
")

(->> (str/replace s #"\n" "")
     (re-seq #"(?=(.{10})john(.{10}))")
     (cl-format *out* "~{~{~a~}~%~}"))
;; => y name is  and i wor


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