Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以在集合中使用插入符号和前瞻?_Python_Regex - Fatal编程技术网

Python 是否可以在集合中使用插入符号和前瞻?

Python 是否可以在集合中使用插入符号和前瞻?,python,regex,Python,Regex,我已经阅读了文档,并查看了其他问题,但我没有找到答案 是否可以在集合中使用先行,或者将先行作为集合中的补码 我想创建一个集合,它匹配除了前面有空格的破折号之外的所有字符。但是,如果只有一个空格后面没有破折号,那么应该是一个匹配的空格 我一直在想这样的方法会奏效,但事实并非如此: r'[^\s(?=\-)]' lookaheads在一个集合中不起作用吗?如果没有,我如何着手解决这个问题 编辑以提供示例: 我一直在努力寻找一种更准确的替代方法 r'([^\-]*)\-(.*)' 这是为了读一行和

我已经阅读了文档,并查看了其他问题,但我没有找到答案

是否可以在集合中使用先行,或者将先行作为集合中的补码

我想创建一个集合,它匹配除了前面有空格的破折号之外的所有字符。但是,如果只有一个空格后面没有破折号,那么应该是一个匹配的空格

我一直在想这样的方法会奏效,但事实并非如此:

r'[^\s(?=\-)]'
lookaheads在一个集合中不起作用吗?如果没有,我如何着手解决这个问题

编辑以提供示例:

我一直在努力寻找一种更准确的替代方法

r'([^\-]*)\-(.*)'
这是为了读一行和分开的艺术家从标题

应用
re.match(r'([^\-]*)\-(.*),“艺术家-头衔”)
应产生:

group(1) = "artist"
group(2) = "title"
但是,如果艺术家名称包含破折号,则会捕获字符串的错误部分

例如:

re.match(r'([^\-]*)\-(.*)', "jay-z - title")
将产生:

group(1) = "jay"
group(2) = "z - title"

我希望捕获组捕获空格和破折号,但如果破折号前面有空格,则不捕获(如果空格后面有破折号,则不捕获)。

有两个问题

  • character类指定许多可能性来匹配正在搜索的文本中的单个字符。前向和后向断言您要匹配的角色周围的条件,但它们不是该角色的一部分

  • 先行字符在字符类中不是特殊的——它们被视为文字字符。字符类
    r'[^\s(?=\-)]'
    相当于
    r'[^\-)(?\s=])
    并表示“匹配除=、?、(、空格和\和之间的所有字符以外的所有字符”

  • 对于您似乎正在尝试的操作,请尝试匹配除破折号之外的每个字符,并使用alternation获得前面没有空格的破折号:

    r'([^-]|(?<!\s-))'
    
    split
    获取要拆分的子字符串,以及从该字符串执行的可选最大拆分次数。
    split
    将源字符串拆分为拆分参数上的子字符串列表,并删除拆分参数

    指定最大拆分次数N将返回一个N+1子字符串列表,其中拆分目标的前N个实例将被删除。拆分目标的任何后续实例都将保留在原来的位置

    split
    默认为从左到右读取字符串,您可以使用
    rsplit
    从右到左读取字符串,它还支持
    maxslit
    可选参数:

    >>> 'prince - purple rain - a love-song'.split(' - ', 1)
    ['prince', 'purple rain - a love-song']
    >>> 'prince - purple rain - a love-song'.rsplit(' - ', 1)
    ['prince - purple rain', 'a love-song']
    

    内置字符串类型有很多功能,您可以在中找到。

    您可以给出一些示例,说明您拥有什么、匹配什么和不应该匹配什么吗?更新为包含示例和正确答案,我想知道这是谁和为什么被否决的。可能是因为我在计算剩下的。应该在发帖前完成这个想法,而不是太油嘴滑舌。
    >>> 'prince - purple rain - a love-song'.split(' - ', 1)
    ['prince', 'purple rain - a love-song']
    >>> 'prince - purple rain - a love-song'.rsplit(' - ', 1)
    ['prince - purple rain', 'a love-song']