首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用python中的正则表达式正确拆分字符串

无法使用python中的正则表达式正确拆分字符串
EN

Stack Overflow用户
提问于 2022-11-23 17:28:01
回答 1查看 31关注 0票数 1

我使用regex模式来拆分一些字符串,根据管道作为分隔符。大多数字符串能够按照我的要求正确地拆分,但是有一种类型的字符串没有正确地拆分。

我正在考虑的定界符是管道,规则是,如果管道或其他特殊字符(如\ or“)在字符串中存在或以双引号括起来,则不应在该字符串中进行拆分。我使用的正则表达式模式如下:

代码语言:javascript
复制
pattern = r'"?\|(?!(?:(?<=[A-Za-z]\|)|(?<=[A-Za-z]\\\|))(?=[a-zA-Z]))"?'

一些输入字符串值如下所示,它正按预期工作:

代码语言:javascript
复制
text = r'ced"|"ms|n"|4|98'
print( re.split(pattern, text) )
# => ['ced', 'ms|n', '4', '98']

text = r'ced"|"ms\|n"|4|98'
print( re.split(pattern, text) )
# => ['ced', 'ms\\|n', '4', '98']

text = r'2|dgx|3|abc'
print( re.split(pattern, text) )
# => ['2', 'dgx', '3', 'ksfh']

但是,对于下面的输入字符串,这个regex没有像预期的那样拆分字符串。

代码语言:javascript
复制
text = r'2|dgx|abc|3'
print( re.split(pattern, text) )
# => ['2', 'dgx|abc', '3']

与上述输出不同,我期望输出为“2”、“dgx”、“abc”、“3”。我是否可以通过修改当前用于上述输入字符串其余部分的正则表达式来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 17:33:53

可以使用一种提取方法

代码语言:javascript
复制
"\|"?(.*?)"(?=\|)|([^"|]+)

regex演示。详细信息

  • "\|"? - "|"|"子字符串
  • (.*?) -第1组:除行中断字符以外的任何零个或多个字符尽可能少
  • " -a " char
  • (?=\|) --一种正面的展望,它需要在右边立即使用|字符。
  • | -或
  • ([^"|]+) -第2组:除"|以外的任何一个或多个字符。

Python演示

代码语言:javascript
复制
import re
rx = re.compile(r'"\|"?(.*?)"(?=\|)|([^"|]+)')
texts = [r'ced"|"ms|n"|4|98',
    r'ced"|"ms\|n"|4|98',
    r'2|dgx|3|abc',
    r'2|dgx|abc|3']
for text in texts:
    print([f'{x}{y}' for x, y in rx.findall(text)])

输出:

代码语言:javascript
复制
['ced', 'ms|n', '4', '98']
['ced', 'ms\\|n', '4', '98']
['2', 'dgx', '3', 'abc']
['2', 'dgx', 'abc', '3']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74550840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档