繁体   English   中英

RegEx匹配跟随或前面有另一个字符或两者的字符,但不是两者都不匹配

[英]RegEx to match character followed or preceded by another character or both but not neither

我试图匹配一个连字符,如果它前面或后面是空格或两者,但不是一个独立的连字符。 虽然多个管道将解决这个问题(类似于已经问过但不一样的问题),我想知道是否存在直接解决方案。

例如。 我想匹配(假设.是一个格式化的空间) .-. .--. 但不仅仅是-

当前表达式:

/ *- */g

匹配所有这些。

是否有一种方法可以在连字符之前或之后的至少一个空格中有一个或多个但是对于聚合?

编辑:更多上下文

我正在处理多个表达式:

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更新为*- *| + *- *| +然后在正常情况下(第一个例子),它会冗余地匹配一个连字符,并用一个我想要改进的连字符替换它。

Eg. I want to match (assume . to be a space for formatting) .-. or .- or -. but not just -

您对一个条件使用断言,然后对剩余条件使用非断言模板。
这样,在这种情况下您不需要替换。

对于你的类比,就是这个
(?=[.-]*\\.)\\.*-\\.*

https://regex101.com/r/ivtl8z/1

用空格代替点,产生这个(在课堂上用于视觉效果的空间)
(?=[ -]*[ ])[ ]*-[ ]*

否则这个(框架为一个字符串)

regex = '(?=[ -]* ) *- *'  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM