【问题标题】:How do I manipulate string "x" by itself without mixing it in other strings [closed]如何在不将其与其他字符串混合的情况下单独操作字符串“x”[关闭]
【发布时间】:2020-01-09 14:20:14
【问题描述】:

我目前正在编写一个自定义文件解析系统来将特定的 Txt 文件转换为有效的 JSON,但我在提取字符“x”和“y”时遇到了一些困难

我有这些 txt 文件可能包含的所有可能变量的列表。

    #Loops through lists to match words and change the paras to be JSON compliant
    for x in linedefParas :
        string = "\"%s\"" % x
        data = data.replace(x, string) 
    for y in sidedefParas :
        string = "\"%s\"" % y
        data = data.replace(y, string)
    for z in vertexParas :
        string = "\"%s\"" % z
        data = data.replace(z, string)

这可以正常工作,但 vertexParas 包含字符串“x”和“y”,这是一个问题,因为 x 和 y 被在单词中以及其自身中提取。

{
x = 880.0;
y = 1288.0;
SECxDis = 90;
}

它不会只在 "x" 和 "y" 周围加上双引号,而是像这样用完整的单词来做

{
"x" = 880.0;
"y" = 1288.0
"SEC"x"Dis" = 90;
}

我希望从此代码中得到的结果如下所示:

{
"x" = 880.0;
"y" = 1288.0;
"SECxDis" = 90;
}

我想要的只是 他们自己 用双引号括起来的“x”和“y”字符串。不是字符串其他部分的字母。

谢谢,奥利

【问题讨论】:

  • 将您的正则表达式更改为类似 \sx\s 示例:regex101.com/r/J50xBy/2 tl;dr:只选择前后有空格的 x 和 y-s
  • 变量和函数名一般应遵循lower_case_with_underscores风格。

标签: python string list character


【解决方案1】:

仅当子字符串没有出现在较大的单词中时才定位子字符串的一种常规方法是使用正则表达式的“单词边界”功能。示例:

import re

s = """{
x = 880.0;
y = 1288.0;
SECxDis = 90;
}"""

linedefParas  = ["x", "y"]
for x in linedefParas :
    s = re.sub(rf"\b{x}\b", lambda match: f'"{match.group()}"', s)

print(s)

结果:

{
"x" = 880.0;
"y" = 1288.0;
SECxDis = 90;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多