【问题标题】:Combining two regex "^[\x20-\x7E]*$" and "\S(.*\S" into one将两个正则表达式 \"^[\\x20-\\x7E]*$\" 和 \"\\S(.*\\S\" 合二为一
【发布时间】:2022-08-02 20:02:35
【问题描述】:

我有两个分别工作的正则表达式:^[\\x20-\\x7E]*$\\S(.*\\S

但我不知道如何将两者结合起来,所以它会匹配它们。

我试过(^[\\x20-\\x7E]*$)*?(\\S(.*\\S)?),但没有用。

我在 pattern=\"(^[\\x20-\\x7E]*$)*?(\\S(.*\\S)?)\" 的输入标签中使用了它

  • 我们能否获取您想要匹配的文本和您不想匹配的文本的示例,只是为了让测试我们的解决方案更容易帮助您?谢谢!
  • \\S(.\\S 在我看来不像一个有效的 JS 正则表达式
  • 看起来这是一个错字@CristianTraìna,其他实例都说\\S(.*\\S
  • @Aaron Meese 我必须将所有字母数字与特殊字符匹配,除了 á (Latin characters) 之类的字符。还要避免开始空格和结束空格,但应该在空格之间匹配,例如匹配,\“Priya@ #432\”,例如不匹配\“priya##23á\”

标签: javascript


【解决方案1】:

将两个正则表达式与管道符号结合起来。它与逻辑 OR 相同。这是一个代码 sn-p 演示如何使用它。

import re

regex_list = ["^[\x20-\x7E]$", "\S(.*\S)"]
regex = '|'.join(regex_list)

print(regex)                       # ^[ -~]$|\S(.*\S)
print(re.search(regex, "C"))       #matches first pattern
print(re.search(regex, "CAT CAT")) #matches second pattern
print(re.search(regex, " 3 "))     #matches neither pattern

【讨论】:

    【解决方案2】:

    一种方法是使用单词边界 (\b) 而不是 \S 锚:

    ^\b[\x20-\x7E]*\b$
    

    这将匹配您给定的测试用例Priya@ #432,但不会匹配priya##23áPriya@ #432 。您可以在 Regex101 here 上查看此正则表达式的示例。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2014-09-26
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多