簡體   English   中英

類似字符串的正則表達式

[英]Regex for similar string

我有一個字符串,可以是:

X=Y 

或者

X

這里 X 和 Y 可以是任何包含字母的單詞。

我希望當字符串為X=Y X 應該在第 1 組中,Y 應該在第 2 組中

但是當字符串是X X 應該在第 2 組中。

到目前為止,我只能得到這個:

(\w+)=(\w+)

什么應該是正確的正則表達式?

要匹配字母,您需要使用[a-zA-Z] (匹配任何 ASCII 字母)或[^\\W\\d_] (匹配任何 Unicode 字母),而不是匹配字母、數字或下划線的\\w和一些Python 3.x 中默認有更多字符。

你需要

^(?:([A-Za-z]+)=)?([A-Za-z]+)$

或者

^(?:([A-Za-z]+)=)?([A-Za-z]+)\Z

查看正則表達式演示

細節

  • ^ - 字符串的開始
  • (?:([A-Za-z]+)=)? - 一個可選的非捕獲組匹配 1 或 0 次出現:
    • ([A-Za-z]+) - 第 1 組:一個或多個字母
    • = - a =字符
  • ([A-Za-z]+) - 第 2 組:一個或多個字母
  • \\Z - 字符串的末尾( $匹配字符串位置的末尾)。

你幾乎用你原來的正則表達式就擁有了它。

它只需要一些調整:

^(\w+)(=(\w+))?$
  • ^ = 字符串開始
  • (\\w+) = 第一個捕獲組盡可能多地匹配任何單詞,如字符(包括數字)。
  • (=...)? = 第二個捕獲組中的所有內容(以“=”開頭)都是可選的
  • 第二個(\\w+) = 第三個捕獲組與第一個匹配相同的內容
  • $ = 字符串結尾

更新

我的答案實際上並沒有回答原始問題,因為“X”字符串沒有在第二個答案組中落入“X”。

我考慮刪除答案,但為了網站上的其他訪問者正在尋找更簡單的答案,不需要“X”專門位於第二個捕獲組中,我將保留它。

此外,也許原始提問者更願意使用更簡單的正則表達式並修改他們的代碼以使用正則表達式,而不是使用正則表達式來處理代碼。

暫無
暫無

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

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