C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
And: We use the indexes returned by find() and rfind to get the indexes of the desired string slice.
SubstringFinally: We use the string slice syntax in Python to get substrings of the strings. We thus get substrings relative to other substrings.
Python program that locates relative slices
def between(value, a, b):
# Find and validate before-part.
pos_a = value.find(a)
if pos_a == -1: return ""
# Find and validate after part.
pos_b = value.rfind(b)
if pos_b == -1: return ""
# Return middle part.
adjusted_pos_a = pos_a + len(a)
if adjusted_pos_a >= pos_b: return ""
return value[adjusted_pos_a:pos_b]
def before(value, a):
# Find first part and return slice before it.
pos_a = value.find(a)
if pos_a == -1: return ""
return value[0:pos_a]
def after(value, a):
# Find and validate first part.
pos_a = value.rfind(a)
if pos_a == -1: return ""
# Returns chars after the found string.
adjusted_pos_a = pos_a + len(a)
if adjusted_pos_a >= len(value): return ""
return value[adjusted_pos_a:]
# Test the methods with this literal.
test = "DEFINE:A=TWO"
print(between(test, "DEFINE:", "="))
print(between(test, ":", "="))
print(before(test, ":"))
print(before(test, "="))
print(after(test, ":"))
print(after(test, "DEFINE:"))
print(after(test, "="))
Output
A
A
DEFINE
DEFINE:A
A=TWO
A=TWO
TWO
So: If the None constant is desired, the return statements could be easily modified to return None instead.
NoneAnd: A program could implement a language, like the one with the DEFINE example, to change settings at runtime.
Tip: This could reduce changes to your Python code. If a variable needs changing, you could just alter the text file.
Finally: Reducing code churn, as with a small configuration file language, can reduce the possibility of new bugs being introduced.