如果一个字符串是由双引号包围的点(.),那么它是有效的。它自己的点或一个双引号是无效的。
# Valid str examples
str1 = 'Don "B." White'
str10 = 'Don "M.dom" White'
str2 = 'Don "B." White "H." Joe'
# In-valid str examples
str3 = 'Don "B. White'
str4 = 'Don "B." White "H Simpson'
str5 = 'Don B. White' # dot must have double quotes around it e.g. "B."
我可以检查一个点是否被双引号括起来
re.search(r'(?!")\.(?!")', str)
但是构造reg来检测str3
或str4
中的单个double有点困难
我尝试了不同的负先行r'"(?!")'
(我知道它是错误的)或[^"]
正则表达式的变体,但似乎不能让它工作。有什么想法吗?
2条答案
按热度按时间p4rjhz4m1#
您可以使用以下正则表达式:
RegEx Demo
RegEx演示:
^
:开始(?:
:启动非捕获组[^".\n]*
:匹配0个或多个不是"
和.
且不是换行符的字符"
:匹配"
[^"\n.]*
:匹配0个或多个不是"
和.
且不换行的任何字符\.
:匹配.
[^"\n]*
:匹配0个或多个非"
且非换行符的字符"
:匹配"
)*
:结束非捕获组。重复此组0次或更多次[^".\n]*
:匹配0个或多个非"
且非换行符的字符$
:结束xmjla07d2#
你需要这样的东西:
你可以在工作中看到一些例子:
https://regex101.com/r/xgUzEL/1
同时检查单元测试选项卡。
您可能不需要外部命名的捕获组
(?P<string>)
,但如果您想在更大的子字符串中使用它,它可能会有所帮助。