簡體   English   中英

如何在不使用換行符的情況下使用正則表達式匹配“結尾”?

[英]How can I use regex to match “the end” without allowing a newline there?

^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')
>>>

注意:此答案具體取決於Python中\\Z的含義。 在其他正則表達式實現中, 通常將這個概念拼寫為 \\z 您還可以使用負超前斷言,但是其語法在正則表達式實現中也有所不同。 有關在Python中使用負超前斷言的示例,請參見dawg的答案

使用否定的前瞻性確保沒有\\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')
>>> 

在大多數其他現代正則表達式中,它們的作用相同。

Perl:

  DB<11> print 'match' if "abc\n" =~ /^abc(?!\n)$/

  DB<12> print 'match' if "abc" =~ /^abc(?!\n)$/              
match

紅寶石:

irb(main):031:0> "abc"[/^abc(?!\n)$/]
=> "abc"
irb(main):032:0> "abc\n"[/^abc(?!\n)$/]
=> nil

PHP:

$ php -r 'print preg_match("/^abc(?!\n)$/", "abc\n");'
0
$ php -r 'print preg_match("/^abc(?!\n)$/", "abc");'
1

這是一個否定的前瞻性,因此,如果它在行的末尾但在其他任何地方,都將找不到匹配項。

>>> re.search('abc(?!\n)','abc\n')
>>> re.search('abc(?!\n)','abc')
<_sre.SRE_Match object at 0x103eceac0>

我不知道這是否適用於python中的regex引擎,但是您可以簽出。 負面\\正面展望 您可以使用否定的前瞻來查看\\ n是否在“ abc”之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM