相似字符串的正则表达式

Regex for similar string

我有一个字符串可以是:

X=Y 

X

这里的 X 和 Y 可以是任何包含字母的单词。

我希望当字符串为 X=Y 时,X 应在第 1 组,Y 应在第 2 组

但是当字符串是 X 时,X 应该在第 2 组中。

到目前为止我只能得到这个:

(\w+)=(\w+)

正确的正则表达式应该是什么?

要匹配字母,您需要使用 [a-zA-Z](匹配任何 ASCII 字母)或 [^\W\d_](匹配任何 Unicode 字母),而不是 \w 匹配字母、数字或 Python 3.x.

中默认的下划线和更多字符

你需要

^(?:([A-Za-z]+)=)?([A-Za-z]+)$

或者

^(?:([A-Za-z]+)=)?([A-Za-z]+)\Z

regex demo

详情

  • ^ - 字符串开头
  • (?:([A-Za-z]+)=)? - 可选的非捕获组匹配 1 次或 0 次出现:
    • ([A-Za-z]+) - 第 1 组:一个或多个字母
    • = - 一个 = 字符
  • ([A-Za-z]+) - 第 2 组:一个或多个字母
  • \Z - 字符串的结尾($ 匹配字符串位置的结尾)。

你几乎已经用你原来的正则表达式了。

它只需要一些调整:

^(\w+)(=(\w+))?$
  • ^ = 字符串开头
  • (\w+) = 第一个捕获组尽可能多次匹配任何单词如字符(包括数字)。
  • (=...)? = 第二个捕获组中的所有内容(以“=”开头)都是可选的
  • 第二 (\w+) = 第三个捕获组与第一个捕获组匹配相同的东西
  • $ = 字符串结尾

更新

我的回答实际上并没有回答原始问题,因为 "X" 字符串没有 "X" 在第二个答案组中。

我考虑过删除答案,但为了网站上正在寻找不需要 "X" 的更简单答案的其他访问者,我将保留它第二个捕获组。

此外,也许最初的提问者宁愿有一个更简单的正则表达式并修改他们的代码以使用正则表达式而不是制作一个正则表达式来使用代码。