Python RE:检查单词是否仅在另一个单词之前或之后

时间:2014-07-22 08:02:57

标签: python regex

我试图将变量映射到excel中的特定列。让我说要抓住:

2.4 string
string 2.4

但不是:

2.4 string 2.4
string

我使用了这个表达式,但该表达式与我不想要的"2.4 string 2.4"匹配:

 r"([2]\.[4])?\s*(\"|'|inch)?\s*String\s*([2]\.[4])?\s*(\"|'|inch)?"

在字符串"2.4 string"上使用时,group()函数仅返回"string"而不是"2.4 string"

任何人都可能知道解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(?:2\.4 string|string 2\.4)$

示例VBScript:

Dim myRegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "^(?:2\.4 string|string 2\.4)$"
If myRegExp.Test(SubjectString) Then
    ' Successful match
Else
    ' Match attempt failed
End If

<强>解释

  • ^锚点断言我们位于字符串的开头
  • `(?:...)是一个匹配...
  • 的非捕获组
  • 2.4 string
  • |
  • string 2.4
  • $锚点断言我们位于字符串的末尾

答案 1 :(得分:0)

您可以使用

(^string\s*(?:2\.4)$|^(?:2\.4)\s*string$)
带有m,g和i标志的

(多行,不区分大小写和全局)

这是基本的正则表达式:它将搜索

^string\s*(?:2\.4)$

OR

^(?:2\.4)\s*string$

匹配中的结果是&#34;字符串2.4&#34;或&#34; 2.4字符串&#34;。
基于你提供的正则表达式,我认为你已经知道每个正则表达式代码的含义。 如果您需要更多信息,请与我们联系。

http://regex101.com/#python

上进行了测试

编辑:我看到@ zx81已经有了相同的答案,这也是正确的