python - Possible to use caret and lookahead in set? -
i've read docs , looked on other questions haven't found answer.
is possible use lookahead within set, or have lookahead complement within set?
i want create set matches every character except dash preceded space. however, if there space not followed dash should match.
i thinking work, has not:
r'[^\s(?=\-)]'
do lookaheads not work inside of set? if not, how go solving problem?
edited provide examples:
i have been trying find more accurate alternative to
r'([^\-]*)\-(.*)'
which intended read line , separate artists titles.
applying re.match(r'([^\-]*)\-(.*)', "artist - title")
should yield:
group(1) = "artist" group(2) = "title"
however if artist name includes dash wrong parts of string captured.
example:
re.match(r'([^\-]*)\-(.*)', "jay-z - title")
would yield:
group(1) = "jay" group(2) = "z - title"
i want capture group capture spaces , dashes, not capture dash if preceded space (or space if followed dash, assuming lookahead vs lookbehind).
there 2 problems.
a character class specifies number of possibilities match a single character in text being searched. lookahead , lookbehind assert conditions around character match, not part of character.
the lookahead characters are not special in character class - treated literal characters. character class
r'[^\s(?=\-)]'
equivalentr'[^\-)(?\s=]'
, means "match every character except =, ?, (, whitespace, , characters between \ , )".
for seem trying do, try matching every character except dash, , use alternation dashes not preceded space:
r'([^-]|(?<!\s-))'
(edited after question added examples)
if can trust ' - '
separates artist song title, , on first occurrence, can use split
method on each string, follows:
>>> "jay-z - title".split(' - ', 1) ['jay-z', 'title'] >>> 'prince - purple rain'.split(' - ', 1) ['prince', 'purple rain'] >>> 'prince - purple rain - love-song'.split(' - ', 1) ['prince', 'purple rain - love-song']
split
takes substring on split, , optional maximum number of splits string. split
returns source string split list of substrings on split argument, split argument removed.
specifying maximum number of splits n returns list of n+1 substrings first n instances of split target removed. subsequent instances of split target left in place.
split
defaults left-to-right reading of string, , can right-to-left reading of string rsplit
, supports maxsplit
optional argument:
>>> 'prince - purple rain - love-song'.split(' - ', 1) ['prince', 'purple rain - love-song'] >>> 'prince - purple rain - love-song'.rsplit(' - ', 1) ['prince - purple rain', 'a love-song']
the built-in string type has lot of functionality, can find in python documentation.
Comments
Post a Comment