python 如果找到单词,则正则表达式匹配直到单词,否则匹配完整的字符串,匹配组将大于 0
python Regex match till word if word found else match complete string and match group will be greater then 0
我正在编写一个正则表达式来匹配字符串直到特定单词(如果单词在字符串中),否则需要匹配完整字符串。比赛结果应为第 1 组。
这里的单词是:-my-word
mylaptop-my-word > mylaptop(第 1 组比赛)
我的笔记本电脑 > 我的笔记本电脑(第 1 组比赛)
mylaptop-my-word-hello-my-word > mylaptop-my-word-hello(第 1 组比赛)
到目前为止我试过这个:
([\s\S]+)-my-word|([\s\S]+)
但它给了我
mylaptop-my-word > mylaptop(第 1 组比赛)
mylaptop > mylaptop(group2 比赛)
需为group1匹配
您可以使用
(?s)^((?:(?!-my-word).|-my-word(?=.*-my-word))+)
参见regex demo。
详情:
(?s)
- re.DOTALL
内联修饰符标志
^
- 字符串开头
(?:(?!-my-word).|-my-word(?=.*-my-word))+
- 出现一次或多次:
(?!-my-word).
- 不是 -my-word
字符序列 起点的任何字符
|
- 或
-my-word(?=.*-my-word)
- -my-word
后跟另一个 -my-word
在尽可能多的零个或多个字符之后
我正在编写一个正则表达式来匹配字符串直到特定单词(如果单词在字符串中),否则需要匹配完整字符串。比赛结果应为第 1 组。 这里的单词是:-my-word
mylaptop-my-word > mylaptop(第 1 组比赛)
我的笔记本电脑 > 我的笔记本电脑(第 1 组比赛)
mylaptop-my-word-hello-my-word > mylaptop-my-word-hello(第 1 组比赛)
到目前为止我试过这个:
([\s\S]+)-my-word|([\s\S]+)
但它给了我
mylaptop-my-word > mylaptop(第 1 组比赛)
mylaptop > mylaptop(group2 比赛)
需为group1匹配
您可以使用
(?s)^((?:(?!-my-word).|-my-word(?=.*-my-word))+)
参见regex demo。
详情:
(?s)
-re.DOTALL
内联修饰符标志^
- 字符串开头(?:(?!-my-word).|-my-word(?=.*-my-word))+
- 出现一次或多次:(?!-my-word).
- 不是-my-word
字符序列 起点的任何字符
|
- 或-my-word(?=.*-my-word)
--my-word
后跟另一个-my-word
在尽可能多的零个或多个字符之后