正则表达式匹配可选的哈希符号?
Regex match up to optional hash symbol?
我正在尝试匹配 两个组:第一个 应该包含 =-符号前面的所有内容(例如spam =
、bar =
)。 第二组 应该匹配 = 后面的所有内容,直到但不包括哈希符号(例如 True
、42
)。
foo = "/usr/local/bin" # path string
eggs = [0, 1, 2, 3, 1]
spam = True # boolean
bar = 42
我想出了 \(.+\s*=\s*)(.+?(?=\s*#))\
,效果很好,但只适用于包含 #-symbol 的行。
是否可以将#-符号设为可选?
\(.+\s*=\s*)(.+?(?=\s*#)*)\
或 \(.+\s*=\s*)(.+?(?=\s*#*))\
似乎不起作用。
谢谢。
您可以将否定字符 class 与 2 个捕获组一起使用。
([^=\r\n]+)=([^#\r\n]+)
如果双引号中的 #
应该匹配,您可以将其添加到捕获组中作为替代。
([^=\s]+)\s*=\s*("[^"]+"|[^#]+?)\s*(?:$|#)
此模式匹配第一组中的字符,包括 =
个字符(如您所述),下一组匹配 =
之后的所有字符,不包括 #
.[=15= 之后的字符]
(.+\s*=\s*)([^#\r\n]+)
我正在尝试匹配 两个组:第一个 应该包含 =-符号前面的所有内容(例如spam =
、bar =
)。 第二组 应该匹配 = 后面的所有内容,直到但不包括哈希符号(例如 True
、42
)。
foo = "/usr/local/bin" # path string
eggs = [0, 1, 2, 3, 1]
spam = True # boolean
bar = 42
我想出了 \(.+\s*=\s*)(.+?(?=\s*#))\
,效果很好,但只适用于包含 #-symbol 的行。
是否可以将#-符号设为可选?
\(.+\s*=\s*)(.+?(?=\s*#)*)\
或 \(.+\s*=\s*)(.+?(?=\s*#*))\
似乎不起作用。
谢谢。
您可以将否定字符 class 与 2 个捕获组一起使用。
([^=\r\n]+)=([^#\r\n]+)
如果双引号中的 #
应该匹配,您可以将其添加到捕获组中作为替代。
([^=\s]+)\s*=\s*("[^"]+"|[^#]+?)\s*(?:$|#)
此模式匹配第一组中的字符,包括 =
个字符(如您所述),下一组匹配 =
之后的所有字符,不包括 #
.[=15= 之后的字符]
(.+\s*=\s*)([^#\r\n]+)