首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单引号中的字符串

单引号中的字符串
EN

Stack Overflow用户
提问于 2018-08-02 07:47:28
回答 2查看 427关注 0票数 1

我试图使用单引号{}包装大括号中的所有单个值。

示例:

代码语言:javascript
复制
some test {Value1,Value2} more text {Value3} more text {Value4, Value1, Value5, Value9, Value11, Value21}

Above should convert as below:
some test {'Value1','Value2'} more text {'Value3'} more text {'Value4', 'Value1', 'Value5', 'Value9', 'Value11', 'Value21'}

我能够找出模式,但不确定如何在文件中替换它们。

源文件内容:

代码语言:javascript
复制
2321232~CD IN ('JSS12QQ','OQJS','QE9QAA','HAHSS31A','KAA43A','QA00A')~CD IN 
(JSS12QQ','OQJS','ULOE9Q','HAHSS31A','KAA43A','QA00A','QM34AA','WS2A','JS3QQ')~US~
{QA00A,WS2A,JS3QQ,OQJS,KAA43A,ULOE9Q,QM34AA,HAHSS31A,JSS12QQ}~{KAA43A,QA00A,QM34AA,WS2A,JS3QQ}
~CD IN ('2AA2Q')~CD IN ('2AA2Q')~US~{2AA2Q}~{2AA2Q}~{QM34AA,JSS12QQ}

目标文件内容:

代码语言:javascript
复制
2321232~CD IN ('JSS12QQ','OQJS','QE9QAA','HAHSS31A','KAA43A','QA00A')~CD IN 
(JSS12QQ','OQJS','ULOE9Q','HAHSS31A','KAA43A','QA00A','QM34AA','WS2A','JS3QQ')~US~
{'QA00A','WS2A','JS3QQ','OQJS','KAA43A','ULOE9Q','QM34AA','HAHSS31A','JSS12QQ'}~{'KAA43A','QA00A','QM34AA','WS2A','JS3QQ'}
~CD IN ('2AA2Q')~CD IN ('2AA2Q')~US~{'2AA2Q'}~{'2AA2Q'}~{'QM34AA,JSS12QQ'}

获取模式的代码:

代码语言:javascript
复制
import re

def parse(file_name):
        file = open(file_name)
        file_contents =file.read()
        f = file_contents
        rec=re.findall(r"{.*?}",f)
        print (rec)

parse("rule_engine_temp.csv")

请帮助解释,以便我能够理解和处理它的变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 07:52:27

你可以用

代码语言:javascript
复制
import re
f="some test {Value1,Value2} more text {Value3} more text {Value4, Value1, Value5, Value9, Value11, Value21}"
rec=re.sub(r"{([^{}]*)}", lambda x: "{{'{}'}}".format("', '".join(re.split(r'\s*,\s*', x.group(1)))) ,f)
print(rec)
# => some test {'Value1', 'Value2'} more text {'Value3'} more text {'Value4', 'Value1', 'Value5', 'Value9', 'Value11', 'Value21'}

Python演示

备注:

  • {([^{}]*)} -匹配{,然后将{}以外的0+字符捕获到第1组,然后匹配}
  • re.sub将匹配数据对象传递给lambda表达式。
  • Group 1值用\s*,\s*分隔--一个带有可选空格的逗号(如果间距一致,可以使用字符串拆分操作,类似于x.group(1).split(',')),然后与', '连接。
票数 2
EN

Stack Overflow用户

发布于 2018-08-02 08:00:25

我的尝试

代码语言:javascript
复制
s = """some test {Value1,Value2} more text {Value3} more text {Value4, Value1, Value5, Value9, Value11, Value21}"""

import re

def my_sub(g):
    return '{' + re.sub(r'([a-zA-Z\d]+[a-z\d]+)(,|$)', r"'\1'\2", g[1]) + '}'

s = re.sub(r'{([^{}]+)}', my_sub, s)
print(s)

r'{([^{}]+)}'匹配大括号内的字符串(在线演示)

然后,子调用函数my_sub,在该函数中我们将向值(在线演示)添加逗号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51648244

复制
相关文章

相似问题

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