Skip to main content

Emacs style, point based string search-replace library for python

Project description

https://badge.fury.io/py/eep.png

Emacs style, point based search-replace for python.

It works by moving a point and a mark around in the text, somewhat similar to how emacs handles its buffers. This becomes intuitive and easier for some text processing tasks which require usage of after and before in text.

An example problem is here. Using eep, the equivalent python code is

import eep

text = """<p class='q'>Q: Why</p>\n<p class='a'>Because</p>\n
<p class='a'>You need to do</p>\n\n
<p class='q'>Q: How</p>\n
<p class='a'>Do this</p>\n
<p class='a'>And that</p>"""

es = eep.Searcher(text)

print("Before : \n" + str(es) + "\n\n")

while es.search_forward("<p class='q'>"):
    es.search_forward("<p class='a'>")
    es.swap_markers()
    es.insert("<div class='a'>\n")

    if es.search_forward("<p class='q'>"):
        es.search_backward("</p>")
        es.swap_markers()
        es.insert("\n</div>")

es.goto("end")
es.search_backward("<p class='a'>")
es.search_forward("</p>")
es.insert("\n</div>")

es.goto("start")
while es.search_forward("<p class='a'>"):
    es.replace("<p>")

es.goto("start")
while es.search_forward("<p class='q'>Q: "):
    es.replace("<p class='q'>")

print("After : \n" + str(es))
Before :
<p class='q'>Q: Why</p>
<p class='a'>Because</p>
<p class='a'>You need to do</p>

<p class='q'>Q: How</p>
<p class='a'>Do this</p>
<p class='a'>And that</p>


After :
<p class='q'>Why</p>
<div class='a'>
<p>Because</p>
<p>You need to do</p>
</div>

<p class='q'>How</p>
<div class='a'>
<p>Do this</p>
<p>And that</p>
</div>

Usage

  • Install using pip install eep
  • Instantiate a searcher
import eep

es = eep.Searcher("this is a sample text. this is a sentence.")
  • A searcher has two markers for defining regions. A point moves around while searching, replacing, inserting etc. It is the current position where operations are done.
  • mark moves after successful forward or backward searches to mark matching region with the point.
# Search forward for first match from current point
# Return true if match found
# Set mark in beginning and point at end
es.search_forward("th")

# Search backward for first match from current point
# Return true if match found
# Set point in beginning and mark at end
es.search_backward("th")

# Replace marked region
es.replace("dodo")

# Insert at current point
es.insert("dodo")

# Move the point
es.jump(-3)
es.goto(34) # also accepts "start" and "end" strings

# Exchange markers
es.swap_markers()

Project details


Release history Release notifications

This version
History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
eep-0.1.3.tar.gz (4.2 kB) Copy SHA256 hash SHA256 Source None Feb 19, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page