0

我正在使用 java,我必须使用正则表达式检查输入字符串。我是正则表达式的新手。

我在表单中输入输入。

以下是我需要写下正则表达式的示例数据。

LastName  FirstName

Ab.CD           BC
Ab-CFgD         Ab.CD
F'b-CF gD       BC
F'b-CF gD.      F.b-CF gD'D
Fb-CF gD'D      BC
F.b-CF gD'D     F'b-CF gD

表示它包含dot(.), Hiphen(-), And single quotes(')在姓氏和名字之间。

我只为“姓氏,名字”写下了regexx。

"[a-zA-Z]+, *[a-zA-Z]+"

正则表达式用于查找上表中提到的所有字符串

4

2 回答 2

0

"([a-zA-Z\\.\\-\\']*),\\s*([a-zA-Z\\.\\-\\']*)"

使用这个网站来玩正则表达式来确定什么对你有用。

正则表达式测试站点

于 2012-11-30T10:08:35.507 回答
0

尝试这个: -

"([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)"

解释 : -

(            // Capture group 1
  [          // Character class
    a-zA-Z   // alphabets
    .        // a Dot
    '        // A quote
    -        // A hyphen (Should be at the end, in the middle it means a range
  ]+         // Character class close. One or more repetition
)            // Group 1 closes

如您的示例中所示,您的姓氏或名字之间似乎还有一个空格。请检查是否正确。

你有two capture groups上面的正则表达式。这两个组都捕获firstnamelastname。您可以同时打印它们。

一个示例在一些字符串上运行:-

String str1 = "Ab.CD, Ab.CD";
String str2 = "F'b-CFgD., F'b-CFgD.";
String str3 = "F'b-CF gD, F'b-CF gD";

System.out.println(str1.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)"));  // true
System.out.println(str2.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)"));  // true
System.out.println(str3.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)"));   //false

如您所见,最后一个打印错误,因为您的第三个字符串之间有一个空格。如果您还想匹配空格,请将其添加到您的角色类中。


为了确保仅以字母开头firstnamelastname您可以像这样修改您的正则表达式:-

"([a-zA-Z][a-zA-Z.'-]+),[ ]*([a-zA-Z][a-zA-Z.'-]+)"

在两个模式的开头添加[a-zA-Z],以确保第一个字符来自给定的字母范围。

于 2012-11-30T10:05:55.170 回答