Python 如何使用正则表达式匹配“;结束”;不允许有新线?
Python 如何使用正则表达式匹配“;结束”;不允许有新线?,python,regex,newline,Python,Regex,Newline,^abc$匹配字符串abc,但也匹配abc\n(带有尾随的换行符) 我怎么能让它只匹配没有换行符的字符串 (记住Python,但这应该是一个一般的正则表达式问题。)使用只在字符串末尾匹配的\Z而不是$ >>> re.match(r'^abc\Z', 'abc') <_sre.SRE_Match object at 0x02469560> >>> re.match(r'^abc\Z', 'abc\n') >>> 重新匹配(r'^a
^abc$
匹配字符串abc
,但也匹配abc\n
(带有尾随的换行符)
我怎么能让它只匹配没有换行符的字符串
(记住Python,但这应该是一个一般的正则表达式问题。)使用只在字符串末尾匹配的
\Z
而不是$
>>> re.match(r'^abc\Z', 'abc')
<_sre.SRE_Match object at 0x02469560>
>>> re.match(r'^abc\Z', 'abc\n')
>>>
重新匹配(r'^abc\Z',abc')
>>>重新匹配(r'^abc\Z',abc\n')
>>>
注意:这个答案具体取决于Python中
\Z
的含义。这个概念在其他正则表达式实现中是\z
。您也可以使用否定的前瞻断言,但它的语法在不同的正则表达式实现中也有所不同。有关在Python中使用负前瞻断言的示例,请参见。而不是$
使用仅在字符串末尾匹配的\Z
>>> re.match(r'^abc\Z', 'abc')
<_sre.SRE_Match object at 0x02469560>
>>> re.match(r'^abc\Z', 'abc\n')
>>>
重新匹配(r'^abc\Z',abc')
>>>重新匹配(r'^abc\Z',abc\n')
>>>
注意:这个答案具体取决于Python中
\Z
的含义。这个概念在其他正则表达式实现中是\z
。您也可以使用否定的前瞻断言,但它的语法在不同的正则表达式实现中也有所不同。有关在Python中使用消极前瞻断言的示例,请参见。我不知道这是否适用于Python中的正则表达式引擎,但您可以查看。。
您可以使用负向前看来查看\n是否在“abc”之后。我不知道这是否适用于python中的正则表达式引擎,但您可以签出。。
您可以使用负前瞻查看\n是否在“abc”之后。使用负前瞻确保没有
\n
:
>>> re.search(r'^abc(?!\n)$', s1)
>>> re.search(r'^abc(?!\n)$', s2)
<_sre.SRE_Match object at 0x10a716a58>
>>> re.search(r'^abc(?!\n)$', 'abcdefg')
>>>
PHP:
使用负前瞻以确保没有
\n
:
>>> re.search(r'^abc(?!\n)$', s1)
>>> re.search(r'^abc(?!\n)$', s2)
<_sre.SRE_Match object at 0x10a716a58>
>>> re.search(r'^abc(?!\n)$', 'abcdefg')
>>>
PHP:
这是一个消极的前瞻,因此如果它位于行的末尾,它将不会找到匹配项,而是在其他任何地方
>>> re.search('abc(?!\n)','abc\n')
>>> re.search('abc(?!\n)','abc')
<_sre.SRE_Match object at 0x103eceac0>
重新搜索('abc(?!\n'),'abc\n')
>>>重新搜索('abc(?!\n'),'abc')
这是一个消极的前瞻,因此如果它在行的末尾,它将不会找到匹配项,而是在其他任何地方
>>> re.search('abc(?!\n)','abc\n')
>>> re.search('abc(?!\n)','abc')
<_sre.SRE_Match object at 0x103eceac0>
重新搜索('abc(?!\n'),'abc\n')
>>>重新搜索('abc(?!\n'),'abc')
根据您的需要,
'abc\n'。strip()
可能是使用\Z
的一个有用的替代方法。当您说应该是一个通用正则表达式问题时,您的意思是使用多种风格的正则表达式吗?根据您的需要,'abc\n'。strip()
可能是使用\Z
的有用替代方法。当您说应该是一个一般正则表达式问题时,您的意思是在多种类型的正则表达式中吗?这也与'abcwtf'
和'wtfabc'
匹配。从我对问题的理解来看,这两个都不需要。OP中哪里错了?需要澄清。OP使用$
尝试匹配字符串的结尾。这也匹配'abcwtf'
和'wtfabc'
。从我对问题的理解来看,这两个都不需要。OP中哪里有错?需要澄清。OP使用$
尝试匹配字符串的结尾。如果OP旨在查找字符串的开头和结尾,则应该是“\Aabc\Z”。否则,仅当它位于行上的唯一对象时,它才会匹配。\Z
和\Z
在不同的正则表达式引擎中有很大的变化。请看,这在Python中并不总是在正则表达式中或正则表达式的风格中起作用。具体地说,在Java、PCRE、.NET中,\Z
在最后一个(但不包括)\n
之前匹配,因此这与其他语言的要求相反。在其他语言中,你会使用一个\z
消极的前瞻是一个更不可知平台的问题。@StevenRumbalski:Quoting:(考虑到Python,但这应该是一个一般的正则表达式问题。)@Pyson:我把它理解为“我想要一个Python解决方案,但任何了解正则表达式的人都可以回答这个问题。”而你把它理解为“我想要一个跨语言工作的正则表达式。“谢谢。但问题更大:\Z
是Python独有的,有些人会说它完全崩溃了。大多数人将\Z
视为Perl中的“字符串结尾,忽略行终止符”。在Python中正好相反。我删除了dv tho。如果OP用于查找字符串的开头和结尾,那么它应该是“\Aabc\Z”。否则,仅当它位于行上的唯一对象时,它才会匹配。\Z
和\Z
在不同的正则表达式引擎中有很大的变化。请看,这在Python中并不总是在正则表达式中或正则表达式的风格中起作用。具体地说,在Java、PCRE、.NET中,\Z
在最后一个(但不包括)\n
之前匹配,因此这与其他语言的要求相反。在其他语言中,你会使用一个\z
消极的前瞻是一个更不可知平台的问题。@StevenRumbalski:Quoting:(考虑到Python,但这应该是一个一般的正则表达式问题。)@Pyson:我把它理解为“我想要一个Python解决方案,但任何了解正则表达式的人都可以回答这个问题。”而你把它理解为“我想要一个跨语言工作的正则表达式。”谢谢。不过问题更大:\Z
是Python独有的,有些人会说它完全崩溃了。大多数人把\Z
看作是Perl中的“字符串结束,忽略行终止符”。这在Python中正好相反。我删除了我的dv-tho。我认为/^abc(?![\s\s])/
更好、更地道的正则表达式。也适用于较旧的正则表达式。我认为/^abc(?![\s\s])/
更好、更地道的正则表达式。也适用于较旧的正则表达式。