projects
/
python-collate.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Typo.
[python-collate.git]
/
collate
/
_strings.py
diff --git
a/collate/_strings.py
b/collate/_strings.py
index
fd18bb9
..
f81bfd7
100644
(file)
--- a/
collate/_strings.py
+++ b/
collate/_strings.py
@@
-1,11
+1,20
@@
import unicodedata
import unicodedata
+def strip_nonalnum(string):
+ while string and not (string[0].isalpha() or string[0].isnumeric()):
+ string = string[1:]
+ while string and not (string[-1].isalpha() or string[-1].isnumeric()):
+ string = string[:-1]
+ return string
+
def alnumsplit(string):
def alnumsplit(string):
+ if not string:
+ return []
string = unicode(string)
strings = []
string = unicode(string)
strings = []
- word = []
numeric = None
numeric = None
- for char in string:
+ start = 0
+ for i, char in enumerate(string):
if numeric is None:
broke = False
if char.isnumeric():
if numeric is None:
broke = False
if char.isnumeric():
@@
-14,16
+23,18
@@
def alnumsplit(string):
numeric = False
elif numeric and char.isalpha():
broke = True
numeric = False
elif numeric and char.isalpha():
broke = True
+ numeric = False
+ elif numeric and char.isspace():
+ broke = True
+ numeric = None
elif not numeric and char.isnumeric():
broke = True
elif not numeric and char.isnumeric():
broke = True
+ numeric = True
if broke:
if broke:
- if word:
- strings.append(u"".join(word))
- word = []
- numeric = None
- word.append(char)
- if word:
- strings.append(u"".join(word))
+ strings.append(strip_nonalnum(string[start:i]))
+ start = i
+ broke = False
+ strings.append(strip_nonalnum(string[start:i + 1]))
return strings
def wordlike(string):
return strings
def wordlike(string):
@@
-44,6
+55,7
@@
def wordlike(string):
def numeric(orig, invalid=float('inf')):
if not orig:
return (invalid, '')
def numeric(orig, invalid=float('inf')):
if not orig:
return (invalid, '')
+
string = unicode(orig)
for c in string:
if c.isnumeric():
string = unicode(orig)
for c in string:
if c.isnumeric():
@@
-57,6
+69,9
@@
def numeric(orig, invalid=float('inf')):
mult = -mult
string = string[1:]
mult = -mult
string = string[1:]
+ if not string[:1].isnumeric():
+ return (invalid, orig)
+
# Early out if possible.
try:
return (float(string) * mult, orig)
# Early out if possible.
try:
return (float(string) * mult, orig)