正则表达式查找丢失的引号

标签 regex ultraedit

仅当内容缺少开始引号或结束引号时,我才需要一个 perl 正则表达式来选择内容。开始引号前面总是有一个等号 =。结束引号后可以跟一个空格、更多文本或回车。在给定的一行中,可以有许多属性(引号对)要检查。

我试过了 (?<!")(.*?)"但那是一场灾难。我想也许我可以做一个简单的正则表达式找到 equle 符号,查看下一个字符并检查它是否是引号后跟文本和结束引号。但是,如果文本的开头或结尾没有引号,请添加它。

注意引号之间的文本始终是字符数据。不会有符号或空格。

<table pgwide="0" id="dvr_config_firmware>
<title>DFR Firmware</title>
<tgroup cols="2">
<colspec colname="col1>
<colspec colname="col2">

最佳答案

使用分支重置 (?| ... ) (Perl) 你可以匹配信息形式
并使用简单的替换。
这将匹配两个缺失形式之一。

/=(?|(")([^"<>\s]*)()(?=[\s>]|\/>)|(?!")()([^"<>\s]*)("))/

替换为="$2"

https://regex101.com/r/2qvpLr/1

 = 
 (?|
    ( " )                         # (1)
    ( [^"<>\s]* )                 # (2)
    ( )                           # (3)
    (?= [\s>] | /> )
  | 
    (?! " )
    ( )                           # (1)
    ( [^"<>\s]* )                 # (2)
    ( " )                         # (3)
 )

非分支重置方式(Python):

r'=(?:(")([^"<>\s]*)()(?=[\s>]|\/>)|(?!")()([^"<>\s]*)("))'

替换为="\2\5"

https://regex101.com/r/IXFJb6/1

 = 
 (?:
    ( " )                         # (1)
    ( [^"<>\s]* )                 # (2)
    ( )                           # (3)
    (?= [\s>] | /> )
  | 
    (?! " )
    ( )                           # (4)
    ( [^"<>\s]* )                 # (5)
    ( " )                         # (6)
 )

----------------------------

回应@JennyP评论中的新情况:
a condition that must be in account which I wasn't told before. The attribute group can have spaces in it. For instanct <info date="09 JAN 2000 version="1.0"> there needs to be a quote after 2000.

可以做到,因为它不是xml/html,也不是关联的属性
带有解析标记。

因为这些正则表达式只是解析您在
中呈现的原始字符串 你的问题。

你不能把这个问题变成“如何解析xml/html”。
因此,请保持它只匹配原始的、有点成型的文本。

对于 Perl:

=(?|(")((?:(?![a-z]*=)[^"<>])*)()(?=[\s>]|/>)|(?!")()((?:(?![a-z]*=)[^"<>])*)("))

https://regex101.com/r/hXNBSx/1

对于 Python:

=(?:(")((?:(?![a-z]*=)[^"<>])*)()(?=[\s>]|/>)|(?!")()((?:(?![a-z]*=)[^"<>])*)("))

https://regex101.com/r/U4sBOW/1

关于正则表达式查找丢失的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69560870/

相关文章:

python - 如何为正则表达式转义 unicode 字符串?

regex - 在代码块中查找字符串(正则表达式)

c# - 正则表达式;查找单个字符串中 2 个特定单词之间的单词

indentation - 如何修复 Systemverilog 源代码中的缩进

regex - UltraEdit 正则表达式替换功能超出可用资源

javascript - 使用 JavaScript 和通配符的 UltraEdit 脚本

TSV 上的 Java 正则表达式用于捕获组

c# - 使用模式与编译的正则表达式 C# 初始化正则表达式