簡體   English   中英

正則表達式匹配所有以字符串中的特定字符開頭和結尾的單詞

[英]Regex to match all words that startswith and endswith specific characters in string

如何修復我的正則表達式模式以匹配以“X”開頭並以“Z”結尾的每個單詞?

碼:

import re

#input
s = "xaz xazx xaxsza zsxdaszdx zasxz xaaz xaaaz"

pattern1 = "x.*z"
pattern2 = "\bx.*z\b"
pattern3 = "x.*?z"
pattern4 = "\b^x.*z$\b"
pattern5 = "\Bx.*z\B"
#also tried using \s, \S, ^ and $... 

re.findall(pattern, s)

期望的輸出:

out = ["xaz", "xaaz", "xaaaz"] 

我怎樣才能做到這一點?

正則表達式演示

關於你的模式的幾個注釋:

  • "x.*z" - 匹配x ,然后*除了換行之外的任何字符盡可能多的直到最后一次出現的z
  • "\\bx.*z\\b" - 退格符號,然后與上面相同,再次是退格符號
  • "x.*?z" - 一個x ,然后*除了換行之外的任何字符盡可能到第一次出現的z
  • "\\b^x.*z$\\b" - 一個退格符號,后跟字符串的開頭,表示已經發出故障信號,任何0 +字符到z后跟字符串結尾,然后是退格符號
  • "\\Bx.*z\\B" - 非字邊界, x ,任何0 +字符,直到最后一個z后面沒有字邊界。

您需要使用原始字符串文字,以便\\b可以表示單詞邊界。

所以,你可以使用

s = "xaz xazx xaxsza zsxdaszdx zasxz xaaz xaaaz"
pattern = r"\bx\w*z\b"
print(re.findall(pattern, s))
# => ['xaz', 'xaaz', 'xaaaz']

請參閱Python演示

如果要僅使用字母匹配單詞,請使用r"\\bx[^\\W\\d_]*z\\b"

模式演示

  • \\b - 領先的單詞邊界
  • x - 一個x
  • \\w* - 0+單詞字符(字母/數字/ _ )( [^\\W\\d_] _ [^\\W\\d_]構造將匹配任何字母,數字和_在“雙重否定”構造中減去)
  • z a z
  • \\b - 尾隨字邊界。

請注意,如果您只使用空格分隔“單詞”,則可以使用

[x for x in s.split() if x.startswith('x') and x.endswith('z')]

另一個演示

正則表達式:\\ bx \\ S + z \\ b

演示: https//regex101.com/r/XuJybA/2

  1. 使用單詞邊界搜索單詞: \\ b
  2. 看到字符串以x開頭
  3. 然后匹配除space \\ S之外的任何內容
  4. 並確保單詞以z結尾

暫無
暫無

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

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