【问题标题】:How to search for A (any lengths any character) * in Python 3如何在 Python 3 中搜索 A(任意长度任意字符)*
【发布时间】:2021-11-19 20:23:42
【问题描述】:

我有一个带有字母的字符串,偶尔还有 *.我正在尝试在 Python 3 中编写正则表达式来获取以 A 开头并以 * 结尾的字符串中的任何内容,中间的内容可以是任何字母,但不能是 *。非常感谢您的帮助。

【问题讨论】:

  • 如何测试r"(A.+?\*)"
  • @JonSG,正则表达式默认是急切的,这意味着它们会尝试捕获最长的匹配。您的正则表达式将捕获从第一个 A 开始到最后一个 * 结束的子字符串。我建议这个正则表达式:A[^*]*\*
  • @NirH。你误会了。自己试试print(re.search(r"(A.+?\*)", "This is Atest* but not this*").group(0))
  • @JonSG,对不起,我在+ 之后错过了?,你是对的。

标签: python-3.x regex string


【解决方案1】:

尝试使用正则表达式模式\bA\w*\*(?!\S)

inp = "An example is an A* and also an Abc*"
matches = re.findall(r'\bA\w*\*(?!\S)', inp)
print(matches)  # ['A*', 'Abc*']

【讨论】:

    【解决方案2】:

    python 正则表达式可以使用一种更简单的模式。

    r"(A.+?\*)"

    有关“Python 中的贪婪与非贪婪”的更多信息:https://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy

    一个例子:

    import re
    string_to_test = "This is Atest1* but not this* but Atest2* done *a asdf"
    for x in re.findall(r"(A.+?\*)", string_to_test):
        print(x)
    

    这将产生:

    Atest1*
    Atest2*
    

    请注意,根据字符串“A*”是否有效,您可能需要模式r"(A.*?\*)"

    【讨论】:

    • 感谢 JonSG! r"(A.+?*)" 为我工作。我会研究您发送的链接 - 它似乎包含正则表达式的所有信息。
    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 2020-12-22
    • 1970-01-01
    • 2017-10-14
    • 2010-10-03
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多