是否可以编写与未出现次数的嵌套模式匹配的正则表达式?例如,当外括号内嵌有未知数量的打开/关闭括号时,正则表达式是否可以匹配开括号和右括号?
例如:
public MyMethod()
{
if (test)
{
// More { }
}
// More { }
} // End
Run Code Online (Sandbox Code Playgroud)
应该匹配:
{
if (test)
{
// More { }
}
// More { }
}
Run Code Online (Sandbox Code Playgroud) 我正在努力根据变量分隔符拆分文本行,并保留空字段和引用数据.
例子:
1,"2",three,'four, 4',,"6\tsix"
Run Code Online (Sandbox Code Playgroud)
或作为制表符分隔的vesion
1\t"2"\tthree\t'four, 4'\t\t"6\tsix"
Run Code Online (Sandbox Code Playgroud)
两者都应该导致:
['1', '"2"', 'three', 'four, 4', '', "6\tsix"]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
使用拆分,但显然引用的分隔符未按要求处理.
使用csv库的解决方案,但它往往有选项引用一切或什么都没有,而不保留原始引号.
正则表达式,特别是遵循以下答案的模式,但它删除空字段:如何拆分但忽略引号字符串中的分隔符,在python中?
使用pyparsing库.我管理的最好的是如下,但这也会删除空字段(使用逗号分隔符示例):
s = '1,"2",three,\'four, 4\',,"6\tsix"'
wordchars = (printables + ' \t\r\n').replace(',', '', 1)
delimitedList(OneOrMore(quotedString | Word(wordchars)), ',').parseWithTabs().parseString(s)
Run Code Online (Sandbox Code Playgroud)谢谢你的任何想法!
python 2.7代码
cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = cStr.split(',')
print newStr
# result : ['"aaaa"','"bbbb"','"ccc','ddd"' ]
Run Code Online (Sandbox Code Playgroud)
但是,我想要这个结果.
result = ['"aaa"','"bbb"','"ccc,ddd"']
Run Code Online (Sandbox Code Playgroud)
救命..
我无法为此要求编写"优雅"解析器.(一个看起来不像是一顿C早餐).输入是一个字符串,键值对由','分隔,并加入'='.
key1=value1,key2=value2
Run Code Online (Sandbox Code Playgroud)
欺骗我的部分是值可以引用("),而在引号内部,'不会结束键.
key1=value1,key2="value2,still_value2"
Run Code Online (Sandbox Code Playgroud)
最后这部分取得了棘手我使用拆分或re.split,诉诸于我的范围内循环:(.
谁能证明一个干净的方法来做到这一点?
可以假设引号仅在值中发生,并且没有空格或非字母数字字符.
所以我用这个答案非常接近我所需要的.
在我的情况下,我想分割空间,但不是当字符串的一部分在引号内时.
这是我的代码:
data = '"abc dfg" ab da'
PATTERN = re.compile(r'''((?:[^ "']|"[^"]*"|'[^']*')+)''')
wordList = PATTERN.split(data)[1::2]
Run Code Online (Sandbox Code Playgroud)
给wordList:
['"abc dfg"', 'ab', 'da']
Run Code Online (Sandbox Code Playgroud)
如何更改表达式以使字符串没有额外的引号?
像这样:
['abc dfg', 'ab', 'da']
Run Code Online (Sandbox Code Playgroud) 我有一个CSV字符串,其中一些项目可能被{}逗号括在里面.我想在列表中收集字符串值.
在列表中收集值的最pythonic方法是什么?
例1 'a,b,c':,预期输出['a', 'b', 'c']
例2 '{aa,ab}, b, c':,预期输出['{aa,ab}','b','c']
例3: '{aa,ab}, {bb,b}, c'预期输出['{aa,ab}', '{bb,b}', 'c']
我试图使用s.split(',')它,它适用于例1,但会陷入案例2和3.
我相信这个问题(如何拆分但忽略引用字符串中的分隔符,在python中?)与我的问题非常相似.但我无法弄清楚要使用的正确的正则表达式语法.
我正在尝试使用正则表达式 (re.split) 拆分字符串,但自从我使用正则表达式以来已经有一段时间了。
字符串看起来像:
string = '"first, element", second element, third element, "fourth, element", fifth element'
Run Code Online (Sandbox Code Playgroud)
我想在每个逗号上拆分字符串,除非子字符串用引号括起来。
输出应如下所示:
output = ['"first, element"', 'second element', 'third element', '"fourth, element"', 'fifth element']
Run Code Online (Sandbox Code Playgroud)