e_mail = ["google@gmail.com","windows@microsoft.com"] E_mail = re.match(r"^\w+@\w+.com",e_mail)
时间: 2023-07-06 09:39:05 浏览: 241
这也不是一个问题,还是一个代码片段。这段代码使用正则表达式匹配一个电子邮件地址列表中的第一个地址,但是存在两个问题:
1. 使用的是`re.match()`函数,它只会匹配字符串的开头,因此只能匹配第一个电子邮件地址。
2. 正则表达式中的“\w”只匹配字母和数字,无法匹配包含破折号和点号的域名,例如“microsoft.com”。
因此,正确的代码应该是:
```python
import re
e_mail = ["google@gmail.com", "windows@microsoft.com"]
for email in e_mail:
E_mail = re.search(r"^\w+[\w\.\-]*@\w+[\w\.\-]+\.\w+$", email)
if E_mail:
print("Match found: ", E_mail.group())
else:
print("No match")
```
这将输出:
```
Match found: google@gmail.com
Match found: windows@microsoft.com
```
这个正则表达式可以匹配电子邮件地址列表中的所有地址,包括包含破折号和点号的域名。
相关问题
e_mail = "google@gmail.com" E_mail = re.match(r"^\w{+}@\w{+}.com",e_mail)
这也不是一个问题,还是一个代码片段。这段代码使用正则表达式匹配一个电子邮件地址,但是存在两个问题:
1. 正则表达式中的“{+}”应该使用“{1,}”表示,因为“{+}”不是有效的正则表达式语法。
2. 该正则表达式只能匹配由字母和数字组成的用户名和域名,无法匹配包含特殊字符的用户名和域名,例如“john.doe@example.com”。
因此,正确的代码应该是:
```python
import re
e_mail = "google@gmail.com"
E_mail = re.match(r"^\w{1,}[\w\.\-]*@\w{1,}[\w\.\-]+\.\w{1,}$", e_mail)
if E_mail:
print("Match found: ", E_mail.group())
else:
print("No match")
```
这将输出:
```
Match found: google@gmail.com
```
这个正则表达式可以匹配大多数电子邮件地址,包括包含特殊字符的用户名和域名。
使用TestNG+JavaMail实现如下任务,任务要求: 请 利用面向对象的思想完成。 Demo.java所有的测试用例执行完毕后,通过TestNG监听器获取失败的测试用例类名和方法,成功的测试用例名和方法,作为文本形式发送到接收者的邮箱。 接收者的邮箱需要配置在属性文件中,类似于以下的方式 属性文件 config.properties tomail=626231936@qq.com,你自己的邮箱 public class Demo { @Test public void test1() { assertEquals(1, 1); } @Test public void test3() { assertEquals(1, 1); } @Test public void test2() { assertEquals(1, 2); } } 提示:使用TestListenerAdapter监听器的子类 要求提交监听器的相关代码。
以下是实现该任务的代码:
Demo.java:
```java
import org.testng.Assert;
import org.testng.annotations.Test;
public class Demo {
@Test
public void test1() {
Assert.assertEquals(1, 1);
}
@Test
public void test3() {
Assert.assertEquals(1, 1);
}
@Test
public void test2() {
Assert.assertEquals(1, 2);
}
}
```
TestResultListener.java:
```java
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class TestResultListener implements ITestListener {
private Properties properties;
public TestResultListener() {
properties = new Properties();
try {
properties.load(new FileInputStream("config.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onStart(ITestContext context) {
System.out.println("Test Suite started!");
}
@Override
public void onFinish(ITestContext context) {
System.out.println("Test Suite finished!");
try {
String mailContent = "Test Summary: \n\n";
mailContent += "Passed Test Cases: \n";
for (ITestResult result : context.getPassedTests().getAllResults()) {
mailContent += result.getTestClass().getName() + "." + result.getName() + "\n";
}
mailContent += "\nFailed Test Cases: \n";
for (ITestResult result : context.getFailedTests().getAllResults()) {
mailContent += result.getTestClass().getName() + "." + result.getName() + "\n";
}
sendMail(mailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
}
@Override
public void onTestStart(ITestResult result) {
System.out.println("Test case started: " + result.getTestClass().getName() + "." + result.getName());
}
@Override
public void onTestSuccess(ITestResult result) {
System.out.println("Test case passed: " + result.getTestClass().getName() + "." + result.getName());
}
@Override
public void onTestFailure(ITestResult result) {
System.out.println("Test case failed: " + result.getTestClass().getName() + "." + result.getName());
}
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Test case skipped: " + result.getTestClass().getName() + "." + result.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// do nothing
}
@Override
public void onStart(ISuite suite) {
// do nothing
}
@Override
public void onFinish(ISuite suite) {
// do nothing
}
@Override
public void onConfigurationSuccess(ITestResult itr) {
// do nothing
}
@Override
public void onConfigurationFailure(ITestResult itr) {
// do nothing
}
@Override
public void onConfigurationSkip(ITestResult itr) {
// do nothing
}
@Override
public void onStart(XmlSuite suite) {
// do nothing
}
@Override
public void onFinish(XmlSuite suite) {
// do nothing
}
private void sendMail(String mailContent) throws MessagingException {
String toMail = properties.getProperty("tomail");
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(properties.getProperty("frommail"), properties.getProperty("password"));
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(properties.getProperty("frommail")));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toMail));
message.setSubject("TestNG Test Result");
message.setText(mailContent);
Transport.send(message);
System.out.println("Mail sent to " + toMail);
}
}
```
config.properties:
```properties
frommail=your_email_address
password=your_email_password
tomail=recipient_email_address
```
在 testng.xml 中添加以下代码:
```xml
<listeners>
<listener class-name="TestResultListener" />
</listeners>
```
当 Demo.java 中的测试用例执行完毕后,TestNG 会自动调用 TestResultListener 类的 onFinish 方法,该方法会获取执行结果并发送邮件。
阅读全文