簡體   English   中英

正則表達式匹配括號內的所有單詞

[英]Regex to match all words inside parenthesis

想象一下,這是大文本的一部分:

東西(word1 / word2 / w0rd3)東西,東西(word4 / word5)東西/東西(word6)東西(word7 / word8 / word9)東西/東西,(w0rd10 / word11)東西東西(word12)東西(Word13 / w0rd14 / word15)東西東西(word16 / word17)。

我想要的話。 結果必須匹配:

word1
Word2
w0rd3
word4
word5
word6
word7
word8
word9
w0rd10
word11
word12
Word13
w0rd14
word15
word16
word17

結果也不應該像:

(word1) or (word1/Word2/w0rd3) 

基本上沒有/允許

我嘗試過的:

\((\w+)\/(\w+)\/(\w+)\)[^(]*\((\w+)\/(\w+)\)[^(]*\((\w+)\) 

regex101

這匹配這些單詞,但我必須復制它,因為存在許多不干凈的單詞。 我也嘗試了txt2re,但它也是重復的,它不是一行正則表達式。 如果我想在在線正則表達式評估器上使用它並且沒有編碼訪問,那么我需要一行和短正則表達式。 我首選的引擎是Python和C#。


更新:我在文中添加了一些/ 也很抱歉更改接受的答案,所有答案都是正確的,但我必須在這里選擇最快,最有效的正則表達式。

常見的解決方案是檢查,如果有一個閉合)前方無任何開口(在兩者之間。

\w+\b(?=[^)(]*\))

在regex101上查看此演示

  • \\w+匹配一個或多個單詞字符 ,后跟\\b 字邊界
  • 在邊界: (?=[^)(]*\\)) ,如果關閉)是超前與任何 ( )之間

因此,這種模式不會檢查開口(之前,但通常不需要)。

您可以使用將由re.findall返回的捕獲組,並使用正斜杠作為分隔符匹配括號之間的所有捕獲組。

然后在結果中你可以拆分正斜杠:

\((\w+(?:/\w+)*)\)

說明

  • \\(匹配左括號
  • (捕捉小組
    • \\w+匹配1+單詞字符
    • (?:/\\w+)*匹配0次和/或1+個字符
  • )關閉捕獲組
  • \\)匹配右括號

正則表達式演示 | Python演示

如果要匹配多個單詞字符,可以使用否定字符類[^()/]+匹配不是括號或正斜杠:

\(([^()/]+(?:/[^()/]+)*)\)

正則表達式演示

例如:

import re

regex = r"\(([^()/]+(?:/[^()/]+)*)\)"
test_str = "stuff (word1/Word2/w0rd3) stuff, stuff (word4/word5) stuff stuff (word6) stuff (word7/word8/word9) stuff stuff, (w0rd10/word11) stuff stuff (word12) stuff (Word13/w0rd14/word15) stuff-stuff stuff (word16/word17)."
res = list(map(lambda x: x.split('/'), re.findall(regex, test_str)))

或者看看扁平版本

您可以編寫與非單詞匹配的正則表達式,而不是匹配單詞,並使用正則表達式進行拆分:

\)?[^)]+?\(|\).+|/

非單詞是:

  • 一個可選的右括號,后跟一串不是括號的字符,后跟一個左括號。
  • 一個右括號后跟一些文本(這用於匹配字符串的最后一位)
  • 斜線

正則表達式演示

findall與look-behind斷言一起使用

(?<=[(/])\w+

鏈接到REGEX

>>> re.findall(r'(?<=[(/])\w+', input_string)
['word1', 'Word2', 'w0rd3', 'word4', 'word5', 'word6', 'word7', 'word8', 'word9', 'w0rd10', 'word11', 'word12', 'Word13', 'w0rd14', 'word15', 'word16', 'word17']

(?<=[(/])\\w+

積極的觀察(?<=[(/])

  • 斷言下面的正則表達式匹配
  • 匹配列表中的單個字符[(/]
    • (/匹配單個字符
  • \\w+匹配任何單詞字符(等於[a-zA-Z0-9_]
    • +量詞 - 在一次和無限次之間匹配,盡可能多次,根據需要回饋(貪婪)

暫無
暫無

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

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