繁体   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