簡體   English   中英

將特定模式與正則表達式匹配

[英]Match specific pattern with regular expression

我要制作一個正則表達式來匹配這種模式這里的一個例子

JK + 6.00,PP * 2,ZZ,GROUPO

每個小組都有匹配

比賽1

  • JK
  • +
  • 6.00

比賽2

  • PP
  • *
  • 2

比賽3

  • Z Z

比賽4

  • GROUPO

所以逗號分隔的塊(2到12個所有大寫字母)[可選(+或*)和a(正數0 [.0 [0]])

該塊成功解析模式

(?P<block>(?P<subject>[A-Z]{2,12})(?:(?P<operation>\*|\+)(?P<value>\d+(?:.?\d{1,2})?))?)

我們有主題組

(?P<subject>[A-Z]{2,12})

價值

(?P<value>\d+(?:.?\d{1,2})?)

所有可選操作部分(值內)

(?:(?P<operation>\*|\+)(?P<value>\d+(?:.?\d{1,2})?))?

但是如果字符串與模式不完全匹配,則正則表達式必須失敗,這就是問題所在

我嘗試了這個但是沒有用

^(?P<block>(?P<subject>[A-Z]{2,12})(?:(?P<operation>\*|\+)(?P<value>\d+(?:.?\d{1,2})?))?)(?:,(?P=block))*$

有什么建議嗎?

PS。 我用Python重新編寫

我個人會采用兩步解決方案,首先檢查整個字符串是否適合您的模式,然后提取您想要的組。

對於整體檢查,你可能想要使用^(?:[AZ]{2,12}(?:[*+]\\d+(?:\\.\\d{1,2})?)?(?:,|$))*$作為模式,基本上包含你的模式, (?:,|$)匹配分隔符和錨點。

我也調整了你的模式, (?P<block>(?P<subject>[AZ]{2,12})(?:(?P<operation>[*+])(?P<value>\\d+(?:\\.\\d{1,2})?))?) 我已經在你的操作模式和\\.中用[+*]替換了(?:\\*|\\+) \\. .? 在你的價值模式。

一個(非常基本的)python實現可能看起來像

import re
str='JK+6.00,PP*2,ZZ,GROUPO'
full_pattern=r'^(?:[A-Z]{2,12}(?:[*+]\d+(?:\.\d{1,2})?)?(?:,|$))*$'
extract_pattern=r'(?P<block>(?P<subject>[A-Z]{2,12})(?:(?P<operation>[*+])(?P<value>\d+(?:\.\d{1,2})?))?)'
if re.fullmatch(full_pattern, str):
    for match in re.finditer(extract_pattern, str):
        print(match.groups())

http://ideone.com/kMl9qu

我猜這是你要找的模式:

(2個不同的字母)+(時間戳),(2個相同的字母)*(1個數字),(2個相同的字母),(一個字符串)

如果是這樣的話,這個正則表達式可以解決這個問題:

^(\\w{2}\\+\\d{1,2}\\.\\d{2}),((\\w)\\3\\*\\d),((\\w)\\5),(\\w+)$

演示: https//regex101.com/r/8B3C6e/2

暫無
暫無

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

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