首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在python中分割但忽略带引号的字符串中的分隔符?

如何在python中分割但忽略带引号的字符串中的分隔符?
EN

Stack Overflow用户
提问于 2010-05-07 02:13:06
回答 17查看 65.5K关注 1票数 70

我需要像这样拆分字符串,使用分号。但我不想拆分字符串(‘或")中的分号,我不是在解析文件;我只是解析一个没有换行的简单字符串。

part 1;"this is ; part 2;";'this is ; part 3';part 4;this "is ; part" 5

结果应该是:

  • part 1
  • "this is;第2部分;“
  • ‘this is;part 3'
  • part 4
  • this "is;part”5

我认为这可以使用正则表达式来完成,但如果不能,我可以采用另一种方法。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2010-05-07 07:59:50

大多数答案似乎都过于复杂了。You ‘t back references。‘t不需要依赖于re.findall是否提供重叠匹配。假设输入不能被csv模块解析,因此正则表达式是唯一可行的方法,您所需要的就是使用与字段匹配的模式调用re.split。

注意,在这里匹配字段要比匹配分隔符容易得多:

代码语言:javascript
运行
AI代码解释
复制
import re
data = """part 1;"this is ; part 2;";'this is ; part 3';part 4;this "is ; part" 5"""
PATTERN = re.compile(r'''((?:[^;"']|"[^"]*"|'[^']*')+)''')
print PATTERN.split(data)[1::2]

输出结果为:

代码语言:javascript
运行
AI代码解释
复制
['part 1', '"this is ; part 2;"', "'this is ; part 3'", 'part 4', 'this "is ; part" 5']

正如Jean-Luc Nacif Coelho正确指出的那样,这将无法正确处理空组。这取决于可能或不重要的情况。如果这很重要,例如,可以通过将';;'替换为';<marker>;'来处理它,其中<marker>必须是您知道在拆分之前不会出现在数据中的某个字符串(不带分号)。此外,您还需要在以下情况下恢复数据:

代码语言:javascript
运行
AI代码解释
复制
>>> marker = ";!$%^&;"
>>> [r.replace(marker[1:-1],'') for r in PATTERN.split("aaa;;aaa;'b;;b'".replace(';;', marker))[1::2]]
['aaa', '', 'aaa', "'b;;b'"]

然而,这是一个杂乱无章的东西。有什么更好的建议吗?

票数 54
EN

Stack Overflow用户

发布于 2010-05-07 10:57:58

代码语言:javascript
运行
AI代码解释
复制
re.split(''';(?=(?:[^'"]|'[^']*'|"[^"]*")*$)''', data)

每次找到分号时,lookahead都会扫描整个剩余的字符串,确保有偶数个单引号和一个偶数个双引号。(忽略双引号字段中的单引号,反之亦然。)如果先行操作成功,分号就是分隔符。

与匹配字段而不是分隔符的Duncan's solution不同,它不存在空字段的问题。(甚至不是最后一个:与许多其他split实现不同,Python的实现不会自动丢弃尾随的空字段。)

票数 41
EN

Stack Overflow用户

发布于 2016-02-23 04:38:14

代码语言:javascript
运行
AI代码解释
复制
>>> a='A,"B,C",D'
>>> a.split(',')
['A', '"B', 'C"', 'D']

It failed. Now try csv module
>>> import csv
>>> from StringIO import StringIO
>>> data = StringIO(a)
>>> data
<StringIO.StringIO instance at 0x107eaa368>
>>> reader = csv.reader(data, delimiter=',') 
>>> for row in reader: print row
... 
['A,"B,C",D']
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2785755

复制
相关文章
python3 引号中嵌套引号
我们有时候需要在引号中嵌套引号。例如输入一段完整的代码print(str+'你好'),而代码中有引号。
py3study
2020/01/13
3.7K0
Python下字符串指定多个分隔符分割
之前在文章Python数据类型之字符串中介绍了split等分割字符串的方法,但是你会发现只能指定一个分隔符,那在Python下指定多个分隔符像AWK命令那样来分割字符串应该怎么做呢?
后场技术
2020/09/03
4.3K0
SQL Server中自定义函数:用指定的分隔符号分割字符串
其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用。
张传宁IT讲堂
2019/09/17
4.4K0
SQL Server中自定义函数:用指定的分隔符号分割字符串
Python中单引号,双引号,3个单引号
我们知道Python以其易用性而著名,所以刚开始看教程学习看到单引号和双引号都可以使用会以为这是Python为了方便程序员,随便用哪个就好,不用担心用错。其实,背后的原因不只是这么简单。举个例子,想想I'm a big fans of Python.这个字符串应该怎么定义。
py3study
2020/01/13
3.8K0
TeX中的引号
在TeX中,左引号是"“",右引号是"”"。输入一篇包含双引号的文章,你的任务时把它转换成TeX的格式。
Vincent-yuan
2020/05/26
1K0
python中的单引号和双引号的区别和用法_python中打印输出的语句
今天在码代码的过程中突然想到这个问题,于是上网浏览了一下,发现在python中两种表达方式是没有区别的,两种表达方式都可以用来表达一个字符串。但是这两种通用的表达方式,除了可以简化大家的开发,避免出错以外,还有一种好处,就是可以减转义字符的使用,使程序看起来更加简洁,更清晰。所以这里简单给大家分享一下,并举例说明。
全栈程序员站长
2022/11/16
1.8K0
去除字符串中的双引号「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142601.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
2.7K0
【Python】字符串 ① ( Python 字符串定义形式 | 单引号定义法 | 双引号定义法 | 三引号定义法 | 字符串中包含单引号或双引号的处理方式 )
文章目录 一、Python 字符串定义形式 二、字符串中包含 单引号 / 双引号 一、Python 字符串定义形式 ---- Python 字符串定义形式 : 单引号定义法 : name = 'Tom' 双引号定义法 : name = "Tom" 三引号定义法 : 该定义方式与多行注释相同 , 使用 三引号 定义字符串 : 如果使用变量接收 , 那么定义的就是字符串 ; 如果没有变量接收 , 那么定义的就是多行注释 ; name = """Tom""" 代码示例 : # 单引号定义字符串 nam
韩曙亮
2023/04/07
3.2K0
【Python】字符串 ① ( Python 字符串定义形式 | 单引号定义法 | 双引号定义法 | 三引号定义法 | 字符串中包含单引号或双引号的处理方式 )
MySQL中的单引号和双引号
《请注意前方高能有引号!》提到过Oracle中引号的处理,其实不仅是Oracle,其他的数据库中,同样存在引号是否使用正确的问题,看到社区的这篇文章,就介绍了MySQL中对单引号和双引号的几种使用场景,可以借鉴学习。
bisal
2023/01/08
4.6K0
MySQL中的单引号和双引号
如何在python的字符串中输入纯粹的{
    https://docs.python.org/3/library/string.html#formatstrings
py3study
2020/01/19
3.5K0
C++中字符串的分割
下面开始正题,C++中字符串的分割。 1. 使用strtok函数进行字符串的分割 2. 使用stringstream类配合getline函数进行字符串的分割 3. 使用STL的find函数以及字符串类的substr函数进行字符串分割
卡尔曼和玻尔兹曼谁曼
2019/01/22
7.2K0
C++中字符串的分割
Oracle 单引号 双引号 转义符 分隔符
字符串中出现单引号、双引号;  表或字段等对象的别名(alias)中出单引号、双引号;  单引号、双引号与空格一起使用;
星哥玩云
2022/08/17
2.8K0
如何在 Python 中反转字符串?
在 Python 中,字符串是 Unicode 字符的序列,尽管 Python 支持许多用于字符串操作的函数,但它没有明确设计用于反转字符串的内置函数或方法。
网络技术联盟站
2022/03/15
2.5K0
【说站】js字符串中的三种引号
2、单引号和双引号基本相同。反引号允许我们通过${…}在字符串中嵌入任何表达式。允许字符串换行。
很酷的站长
2022/11/24
1.5K0
Tex中的引号--UVa 272
题目:在tex中,有做双引号和右双引号,你的任务是把他转化成tex的格式。 特点:边读边处理,不需要把输入字符串完整保留下来。
杨鹏伟
2022/05/05
4940
php中引号之间的区别
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 代码: 效果: 代码: <?php $abc='my name is tom<br>'; ech
贵哥的编程之路
2022/09/23
8140
php中引号之间的区别
获取字符串内双引号中的所有内容
测试字符串 String str = "[\"内容\",\"标题\"]"; 编码如下: package Action; import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo { public static void main(String[] args) { String str = "[\"内容\",\"标题\"]"; Pattern p = Pattern.compile("\"
红目香薰
2022/11/29
4.5K0
获取字符串内双引号中的所有内容
C++中对字符串的分割
由于C++中没有split函数,因此,为了能够对获取的字符串进行按一定符号进行分割,在此学习了通过字符串的find()方法和substr()方法来实现split();具体描述如下:  //涉及到string类的两个函数find和substr:  //  //1、find函数  //原型: size_t find(const string& str, size_t pos = 0) const;  //功能: 查找子字符串第一次出现的位置。  //参数说明:str为子字符串,pos为初始查找位置。  //返回值: 找到的话返回第一次出现的位置,否则返回string::npos  //2、substr函数  //原型: string substr(size_t pos = 0, size_t n = npos) const;  //功能: 获得子字符串。  //参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)  //返回值: 子字符串
用户7886150
2021/01/16
2.3K0
php中的双引号与单引号的基本使用
PHP字符串变量用于存储并处理文本, 在创建字符串之后,我们就可以对它进行操作。我们可以直接在函数中使用字符串,或者把它存储在变量中
itclanCoder
2023/09/14
6100
php中的双引号与单引号的基本使用
点击加载更多

相似问题

分割字符串但忽略带引号的分隔符的regexp

01

标记字符串,但忽略引号中的分隔符

130

拆分字符串,忽略引号内的分隔符(python)

60

忽略双引号中的分隔符

45

忽略引号CsvHelper中的分隔符

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文