簡體   English   中英

Python 字符串中的正則表達式

[英]Regular Expression in Python strings

我想使用正則表達式驗證滿足以下三個條件的字符串

  1. 允許的特殊字符是 (. , _, - )。
  2. 應僅包含小寫字符。
  3. 不應以特殊字符開頭或結尾。

為了滿足上述條件,我創建了如下格式

^[^\W_][a-z\.,_-]+

這種模式可以正常工作到第二個字符。 但是,如果第 3 個和后續字符包含任何特殊字符或大寫字符,則此模式將失敗。

例子:

Pattern 適用於字符串 S@yanthan,但不適用於 Sa@yanthan。 即使第三個和后續字符包含任何特殊字符或大寫字符,我也希望該模式能夠通過。 你能建議我這種模式哪里出錯了嗎? 下面是代碼片段。

import re 

a = "Sayanthan"
exp = re.search("^[^\W_][a-z\.,_-]+",a)

if exp:
    print(True)
else:
    print(False)

根據您的初始規則,我將 go 與:

^[a-z](?:[.,_-]*[a-z])*$

請參閱在線演示

但是,您在評論中提到:

"另外第三個條件是"不應該以特殊字符開頭"而不是"不應該以特殊字符開頭或結尾""

在這種情況下,您可以使用:

^[a-z][-.,_a-z]*$

查看在線演示

您嘗試的模式^[^\W_][az.,_-]+[^\W_]開頭,它將匹配除下划線以外的任何單詞字符,因此它也可以是大寫字符。

然后[az.,_-]+將匹配任何列出的 1+ 次,這意味着字符串也可以以逗號結尾。

查看列出的條件,您可以使用:

^[a-z](?:[a-z.,_-]*[a-z])?\Z
  • ^字符串開頭
  • [az]匹配小寫字符 az
  • (?:非捕獲組
    • [az.,_-]*[az]匹配 0+ 個以 az 結尾的列表
  • )? 關閉組並使其成為可選
  • \Z字符串結束

正則表達式演示

暫無
暫無

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

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