我有一个正则表达式e.g. at regex101
(\/+[^\/\[\]]+(?:\[[^\]']*(?:'[^']*')\])?)+
我已经确认它与我的测试字符串匹配
//SapButton[@automationId='tbar[0]/btn[15]']
由于无法立即理解正则表达式,我使用(?#)
尝试了文档功能,因此我将正则表达式更改为also at regex101
((?# Capturing group for the type name)
\/+(?# Start with / or // )
[^\/\[\]]+(?# Type name exclusing start of attribute and next type)
(?:(?# Non-capturing group for the attribute)
\[(?# Start of an attribute)
[^\]']*(?# Anything but end of attribute or start of string)
(?:(?# non-capturing group for string)
'(?# string start)
[^']*(?# anything inside the string, except end of string)
'(?# string end)
)(?# end of string group)
\](?# end of attribute)
)?(?# Attribute can occur 0 or one time)
)+(?# Type can occur once or many times)
但现在正则表达式不再匹配我的测试字符串了。原因是换行。将正则表达式更改为
((?# Capturing group for the type name)\/+(?# Start with / or // )[^\/\[\]]+(?# Type name exclusing start of attribute and next type)(?:(?# Non-capturing group for the attribute)\[(?# Start of an attribute)[^\]']*(?# Anything but end of attribute or start of string)(?:(?# non-capturing group for string)'(?# string start)[^']*(?# anything inside the string, except end of string)'(?# string end))(?# end of string group)\](?# end of attribute))?(?# Attribute can occur 0 or one time))+(?# Type can occur once or many times)
的工作原理。但它再次难以理解。
如何正确记录正则表达式?
请注意,我希望避免在C#方法的注释中执行此操作,因为在更改正则表达式时,它有太多可能无法更新。
恕我直言,最好用多行的逐字字符串完成(当然,它仍然必须工作)。
答案 0 :(得分:2)
问题是,您必须使用#
转义空格并\
。好消息是#
将开始发表评论,例如C#中的//
您可以在正则表达式的开头使用RegexOptions.IgnorePatternWhitespace
或(?x)
激活它。
(?x)
答案 1 :(得分:0)
它不是一个理想的解决方案,但您可以将记录的正则表达式存储在String中,在匹配之前,您可以替换字符串中的所有\ r \ n。
然后,您将在代码中具有可读表示,并在运行时具有正确的正则表达式。
我不知道其他方式,但你所拥有的是值得称道的。
此致