我要匹配连字符,如果在连字符前面或后面有空格,或者两者都有,但不是独立的连字符。尽管有多个管道可以解决此问题(类似于已经提出但又不相同的问题),但我想知道是否存在直接解决方案。
例如。我想匹配(假设.
是用于格式化的空间).-.
或.-
或-.
,而不仅仅是-
。
当前表达式:
/ *- */g
匹配所有这些。
除了连字符之前或之后的至少一个空格中,是否有一种方法可以使总数达到1个或更多?
编辑:更多上下文
我正在处理多个表达式:
aln = re.compile(r'[^ \-a-zA-Z0-9]+') # matches non space or - or alphanumeric characters
spc = re.compile(' +') # matches one or more spaces
url_data = song + '-' + artist
url_data = re.sub(aln, '', url_data) # remove punctuation and other characters
url_data = re.sub(spc, '-', url_data) # substitute one or more spaces to -
例如。如果歌曲是ABC, XYZ
而歌手是PQR
,那么最后我会得到PQR-ABC-XYZ
。
但是,如果歌曲的形式为, ABC ,
和歌手为PQR
,则我想获得PQR--ABC-
时得到PQR-ABC
。
如果我将spc更新为*- *| +
,则在正常情况下(第一个示例),它将多余地匹配连字符,并仅用我要改进的连字符替换它。
答案 0 :(得分:0)
Eg. I want to match (assume . to be a space for formatting) .-. or .- or -. but not just -
对于一个条件使用断言,然后对其余条件使用非断言模板。
这样,您在这种情况下就不需要更改。
对于您的 dot 类推,就是这样
(?=[.-]*\.)\.*-\.*
https://regex101.com/r/ivtl8z/1
用空格代替点,就产生了这个(为视觉效果在类中加了空格)
(?=[ -]*[ ])[ ]*-[ ]*
否则(以字符串形式)
regex = '(?=[ -]* ) *- *'