如何使用正则表达式在()中不存在|的情况下使用python |拆分字符串?

2024-09-26 22:12:18 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我是新来的Python。你知道吗

我正在尝试使用正则表达式将字符串拆分为|,其中|在()中不存在。但到目前为止没有运气。有什么建议吗?你知道吗

示例:

OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] | "GIVING" { file-name }+

上面的字符串应该分为两个字符串:

字符串1:OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ]

字符串2:"GIVING" { file-name }+


Tags: 字符串name示例outputis建议fileprocedure
3条回答

对特定正则表达式模式使用re.split()函数:

import re

s = 'OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] | "GIVING" { file-name }+'
result = re.split(r'\|(?![^(]*\))', s)

print(result)  # the list, containing 2 strings

输出:

['OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] ', ' "GIVING" { file-name }+']

(?![^(]*\))-lookahead否定断言确保分隔符|后面没有右大括号)

[^(]-匹配除大括号外的任何字符(

\)-匹配右大括号)

展望[正面]:

re.split(r'(?<=] )\|',string)
Out[44]: 
['OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] ',
 ' "GIVING" { file-name }+']

新的^{} module支持的(*SKIP)(*FAIL)机制的一个很好的例子:

import regex as re

rx = re.compile(r'\([^)]*\)(*SKIP)(*FAIL)|\|')
string = """OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] | "GIVING" { file-name }+"""

parts = rx.split(string)
print(parts)
# ['OUTPUT" "PROCEDURE" [ "IS" ] procedure-name [ ( "THROUGH" | "THRU" ) procedure-name ] ', ' "GIVING" { file-name }+']

a demo on regex101.com。你知道吗

相关问题 更多 >

    热门问题