gpt4 book ai didi

python - 正则表达式匹配字符串 "Hello, name"

转载 作者:行者123 更新时间:2023-12-02 01:24:54 26 4
gpt4 key购买 nike

我需要一个可以匹配“Hello, name”模式的正则表达式,但逗号是可选的。如果不存在逗号,则 Hello 和 name 之间的空格数应为 1。如果存在逗号,则逗号和名称之间的空格数应为 1。 Hello +(逗号+空格或空格)之后,至少应该有一个字符,之后可以跟随任何内容

我尝试了以下正则表达式

Hello,?\s{1}\S.*

但它也匹配 "Hello , name" 即 Hello 和逗号之间的空格。

最佳答案

Hello,?\s{1}\S.* 匹配 "Hello , name" (Hello 后面有空格)的原因是:

  • Hello 与初始的 “Hello” 匹配。
  • 由于逗号是可选的,因此不匹配
  • \s{1} 匹配 "Hello" 后面的空格(注意 {1} 是多余的。\s 本身会做同样的事情,匹配单个空格)
  • \S 匹配逗号
  • .* 匹配字符串的其余部分,即 "name"

为防止出现这种情况,请考虑使用以下正则表达式禁止名称中出现逗号和空格:^Hello,?\s[^,\s]+$ Try online :

^Hello,?\s[^,\s]+$
------------------
^ $ : Start and end of string
Hello : Literal Hello
,? : Optional comma
\s : One whitespace
[^,\s]+ : One or more characters that are not comma or space
import re

strings = """Hello, Chopin
Hello Brahms
Hello, Mozart
Hello , name
Hello name
Hello Chopin""".split("\n")

for test in strings:
print(test, re.search(r"^Hello,?\s[^,\s]+$", test))

给出:

Hello, Chopin <re.Match object; span=(0, 13), match='Hello, Chopin'>
Hello Brahms <re.Match object; span=(0, 12), match='Hello Brahms'>
Hello, Mozart None
Hello , name None
Hello name None
Hello Chopin <re.Match object; span=(0, 12), match='Hello Chopin'>

关于python - 正则表达式匹配字符串 "Hello, name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74965129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com