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


Download files

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

Source Distribution

eep-0.1.3.tar.gz (4.2 kB view details)

Uploaded Source

File details

Details for the file eep-0.1.3.tar.gz.

File metadata

  • Download URL: eep-0.1.3.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for eep-0.1.3.tar.gz
Algorithm Hash digest
SHA256 6e0e2adcb8a0f3704c0caecedfe80c7762a54160cb5bdd68129f733a3be17d8d
MD5 b4518776fc5789267c98342a64389a9a
BLAKE2b-256 170ab7c98699ce28e0d1385fea413e6c2f3d4ca6ff71ab179e6d581e1201f07e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page