正则表达式以排除数字电子邮件

时间:2016-02-25 14:58:34

标签: regex pentaho

我有以下样本邮件集

EmailAddress
1123
123.123
123_123
123@123.123
123@123.com
123@abc.com
123mbc@abc.com
123mbc@123abc.com
123mbc@123abc.123com
123mbc123@cc123abc.c123com

如果在@

之前包含完全数字,则需要删除mailid
Expected output:
123mbc@abc.com
123mbc@123abc.com
123mbc@123abc.123com
123mbc123@cc123abc.c123com

我在Java Rex下面使用过。但它消除了一切。我有写这些表达的基本知识。请帮我纠正下面的一个。提前谢谢。

[^0-9]*@.*

3 个答案:

答案 0 :(得分:1)

以下正则表达式只允许电子邮件地址通过符合您的规范:

(?m)^.*[^0-9@\r\n].*@

注意你必须指定多行匹配(m标志。请参阅现场演示。该解决方案使用嵌入式标志语法m标志。您也可以使用Pattern.compile调用Pattern.MULTILINE @参数。)。

regex101的现场演示。

<强>解释

策略:将基本合理的电子邮件地址定义为包含^的单行字符串,严格排除数字前缀。

  • @:行首锚
  • [^...]:基本合理的电子邮件地址必须与at-sign匹配
  • @:在at符号之前,一个字符既不是数字也不是CR / LF。还包括.*,测试的非数字字符不得是第一个签名!
  • apply plugin: 'com.android.application' android { signingConfigs { debugFromAdventPC { keyAlias 'androiddebugkey' keyPassword 'android' storePassword 'android' storeFile file('/home/nick/AndroidStudioKeystores/FromAdventPC/debug.keystore') } releaseFromAdventPC { keyAlias 'release_alias' keyPassword 'deleted' storeFile file('/home/nick/AndroidStudioKeystores/FromAdventPC/my-release-key.keystore') storePassword 'deleted' } } compileSdkVersion 'Google Inc.:Google APIs:18' //compileSdkVersion 15 buildToolsVersion "23.0.2" defaultConfig { applicationId "deleted" minSdkVersion 9 targetSdkVersion 15 } buildTypes { release { minifyEnabled true proguardFiles 'proguard.cfg' } } } android { lintOptions { checkReleaseBuilds false abortOnError false } } dependencies { compile files('libs/osmdroid-android-4.1.jar') compile files('libs/slf4j-android-1.5.8.jar') } :在非数字测试之前和之后,允许任意字符串(嗯,实际上它们不是,但真正的语法验证的电子邮件地址可能不应该发生在这里,绝对不应该是基于可靠性和代码可维护性的正则表达式)。字符串需要在模式中表示,因为模式是锚定的。

答案 1 :(得分:1)

你是说这样的意思吗? (.*[a-zA-Z].*[@]\w*\.\w*)

  

细分<{1}} = 0个字符以上.* = 1   信件[a-zA-Z] = 0个字符以上.*   
@无尽的时间a-zA-Z0-9与单身。之间   

这样您就可以收到至少包含一个字母的电子邮件
https://regex101.com/r/qV1bU4/3

的测试

按照ccf的建议进行编辑并更新了细分

答案 2 :(得分:0)

试试这个:

[^\d\s].*@.+

它将匹配@符号前至少有一个字母或符号的电子邮件。