正则表达式匹配可选的哈希符号?

Regex match up to optional hash symbol?

我正在尝试匹配 两个组第一个 应该包含 =-符号前面的所有内容(例如spam = bar = )。 第二组 应该匹配 = 后面的所有内容,直到但不包括哈希符号(例如 True42)。

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]+)

Regex demo

如果双引号中的 # 应该匹配,您可以将其添加到捕获组中作为替代。

([^=\s]+)\s*=\s*("[^"]+"|[^#]+?)\s*(?:$|#)

Regex demo

此模式匹配第一组中的字符,包括 = 个字符(如您所述),下一组匹配 = 之后的所有字符,不包括 #.[=15= 之后的字符]

(.+\s*=\s*)([^#\r\n]+)

Try there