簡體   English   中英

Python 正則表達式:禁止有異常的字符

[英]Python regular expressions: disallowing characters with exceptions

在我的實際項目中,我想從用戶那里獲得一些輸入。 它不能在開頭、結尾或連續兩次或更多次包含空格,也不能包含任何不是字母或數字的內容。

但是我有兩個問題:

  1. \\W不允許空格。 我想允許一個但不是在開始、結束或不止一次。
  2. 我想允許點,但\\W不允許。 我不能用[^a-zA-Z0-9\\s\\s.]替換它,因為它不允許我想允許的像 'äöüß' 這樣的字符。 如何更改我的代碼以禁止下面模式中的所有內容,但單個空格和點除外?
input_text = input("input: ")
if re.search(r"(^\s|\s{2,}|\s$|\W)", input_text)
    print("invalid input")

您可以使用以下兩者之一:

^[^\W_]+(?:[\s.][^\W_]+)*\Z
^(?:[^\W_]|\.)+(?:\s(?:[^\W_]|\.)+)*\Z

第一個將僅匹配字母之間的單個點和空格。 第二個允許點位於字符串中的任何位置,並且可以是任何連續的數量。 請參閱正則表達式 #1 演示正則表達式 #2 演示

細節

  • ^ - 字符串的開始
  • [^\\W_]+ - 一個或多個 Unicode 字母或數字
  • (?:[^\\W_]|\\.)+ - 匹配一個或多個 Unicode 字母/數字或點的非捕獲組
  • (?:[\\s.][^\\W_]+)* - 零次或多次重復
    • [\\s.] - 單個空格或點
    • [^\\W_]+ - 一個或多個 Unicode 字母或數字
  • \\Z - 字符串的末尾。

在 Python 中,使用類似

if re.search(r'^[^\W_]+(?:[\s.][^\W_]+)*\Z', input_text):
  print('Valid')

暫無
暫無

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

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