簡體   English   中英

匹配,直到正則表達式無法正常工作

[英]match until regex expression not working correctly

我有這個正則表達式應該匹配1 ='aa'或1 =“ aa”或1 = aa,並返回數字/值。

(?<number>\d)=\s*("|')?\s*(?<value>.*?)(?=("|')?\d=|$)

它可以工作,但是返回的值不正確。 在1 =“ aa”的情況下,數字返回為1,但值返回為aa“

對於1 =“ aa”的情況,如何獲得value = aa。

實際表達式可能包含1 ='aa'2 =“ bb” 3 = cc等。

這里的主要問題是:

(?=("|')?\d=|$)

表示“以下任何一項:

  • "加一個數字加=
  • '加一個數字加=
  • 一個數字加=
  • 結束串

“。您會注意到, "'與數字之間沒有空格。 因此,在的情況下, 1="aa" 2=... ,的value簡單地不允許后跟" 2=... ,同樣地,它不會使任何津貼"'加結束OF-串。

因此,最小的解決方法是在數字前允許(不, 要求 )一些空格,並將("|')?從前瞻性斷言移至正則表達式的主要部分:

("|')?(?=\s+\d=|$)

贈送:

(?<number>\d)=\s*("|')?\s*(?<value>.*?)("|')?(?=\s+\d=|$)

在進行此操作時,我們還可以進行其他一些調整以簡化正則表達式並減少可能出錯的情況:

(?<number>\d)=\s*(["']?)(?<value>.*?)\1(?=\s+\d=|$)

(可能還可以進行進一步的清理,但是我對您的數據了解不足,無法建議您進行其他更改。)

把事情簡單化。 精確匹配一對引號(最簡單的方法)是(如下所示,它們是相同的,例如: 1='aa" ):

(
 (
  (?P<number>\d)="(?P<value>[^"]+)"     #or * in stead of + if value can be empty
 ) |
 (
  (?P<number>\d)='(?P<value>[^']+)'     #or * in stead of + if value can be empty
 ) |
 (
  (?P<number>\d)=(?P<value>[^\s]+)      #here you should also choose where you stop 
 )
)

嘗試

(?<number>\d)=\s*("|')?\s*(?<value>.+?)("|')?(\s|$)

如果分配后跟空格或行尾,它將起作用。

其他要考慮的項目:

  • 您的原始表達式(而不是示例)似乎旨在在等號附近支持空格。
  • 您的電話號碼需要支持多個數字嗎?
  • 對可選字符使用方括號可以避免不必要的捕獲組

    (?<數> \\ d +)\\ S * = \\ S * [ “']?(?<值> [^” '\\ S] +)[“']?

暫無
暫無

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

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