使用关键字提取可选部分的正则表达式

时间:2015-08-19 17:26:42

标签: python regex

我希望能够从字符串中提取2个部分,这些部分可能由特定关键字分隔。如果关键字不在那里,则假设仅提供第一个关键字。提供更具体(更清晰)的例子:

'a key b'--->返回(a,b)

'a'(未标识'key'字符串)---> return(a,'')

我首先尝试使用正则表达式“(。)键(。)”这显然不适用于案例2 ...然后“(。)(键)?(。 )“但这不适用于案例1 ......我正在使用Python和findall()函数。

有什么想法吗?我觉得这与贪婪的“(。*)”有关,但无法弄明白。

非常感谢!

3 个答案:

答案 0 :(得分:4)

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;

public class LoginData  {
WebDriver driver;
  @Test
  public void login() {

      driver.findElement(By.linkText("Sign in")).click();
      System.out.println("hello");
  }
  @BeforeTest
  public void beforeTest() throws Exception  {
      WebDriver driver=new FirefoxDriver();
      driver.get("https://www.gmail.com/intl/en/mail/help/about.html");
      Thread.sleep(2000);


  }

  @AfterTest
  public void fterTest() {
      driver.close();

  }

}

答案 1 :(得分:1)

'Simon said: stand up' 有什么问题?

string.split()

答案 2 :(得分:0)

拆分似乎很适合您的问题:

def extract(text):
    return ([part.strip() for part in text.split("key", 1)] + [''])[:2]

for test in ["a key b", "a", "a key", "a longer example of key is this"]:
    print extract(test)

这会给你以下结果:

['a', 'b']
['a', '']
['a', '']
['a longer example of', 'is this']

如果您真的希望使用正则表达式,可以使用以下内容来提供相同的结果:

def extract(text):
    return re.search(r'(.*?)(?:\s+key|\Z)\s*(.*)', text).groups()