我是正则表达式的新手,并且无法提供符合我需要的表达式(javascript)。
对于这个例子:
21 Apr 1789 - 4 Mar 1797 John Adams (b. 1735 - d. 1826) Fed
4 Mar 1797 - 4 Mar 1801 Thomas Jefferson (b. 1743 - d. 1826) D-R
4 Mar 1801 - 4 Mar 1805 Aaron Burr (b. 1756 - d. 1836) D-R
4 Mar 1805 - 20 Apr 1812 George Clinton (b. 1739 - d. 1812) D-R
4 Mar 1813 - 23 Nov 1814 Elbridge Gerry (b. 1744 - d. 1814) D-R
4 Mar 1817 - 4 Mar 1825 Daniel D. Tompkins (b. 1744 - d. 1825) D-R
4 Mar 1825 - 28 Dec 1832 John Caldwell Calhoun (b. 1782 - d. 1850) Dem
4 Mar 1833 - 4 Mar 1837 Martin van Buren (b. 1782 - d. 1862) Dem
4 Mar 1837 - 4 Mar 1841 Richard Mentor Johnson (b. 1780 - d. 1850) Dem
4 Mar 1841 - 4 Apr 1841 John Tyler (b. 1790 - d. 1862) Whg
4 Mar 1845 - 4 Mar 1849 George Mifflin Dallas (b. 1792 - d. 1864) Dem
每行我需要的只是" b之后的4位数年份。 &#34 ;.所以如果我只返回我的比赛,那就是:
1735
1743
1756
1739
1744
1744
1782
1782
1780
1790
1792
无论我如何构建表达式,无论是我自己还是使用任何在线网络应用程序,它总是希望匹配所有 4位数年份,或者全部4 - 数字年份,包括我需要的数字。这当然部分归因于我缺乏经验,所以任何帮助都会非常感激。
答案 0 :(得分:2)
使用正则表达式/b\. (\d{4})/
应匹配列表中的所有出生日期。
答案 1 :(得分:1)
您可以使用此正则表达式:reader := bufio.NewReader(conn)
readbuf := make([]byte, 1500)
err := io.EOF
for sockConnected {
conn.SetReadDeadline(time.Now().Add(10 * time.Millisecond))
readbuf, err = reader.ReadBytes('\x04')
switch {
case err == io.EOF || err == io.ErrUnexpectedEOF:
log.Println("Socket closed. EOF / ErrUnexpectedEOF read in")
sockConnected = false
case err == nil:
//log.Println("No error on read")
case strings.HasSuffix(err.Error(), "i/o timeout"):
//log.Println("Timed out read")
default:
log.Println("Some other error occurred.Reason=" + err.Error())
}
if len(readbuf) == 0 {
continue
} else {
//log.Printf("Received from client=%v", string(readbuf))
log.Printf("Recvd Bytes count=%v", len(readbuf))
}
}
并访问捕获组1以获取所需的值。
答案 2 :(得分:1)
最简单的方法(在Javascript中,因为你在这个问题上标记了Javascript)只是做两个正则表达式。例如,你可以这样做。
var str = '4 Mar 1797 John Adams (b. 1735 - d. 1826)';
var regex = /\(b. [0-9]+/;
var regex2 = /[0-9]+/;
var birthDate = regex2.exec(regex.exec(str));
return birthDate;
如果你得到一般的想法,那么根据你的情况调整它并不困难。只需使用正则表达式(b.1735(在本例中)然后提取1735.这只是必要的,因为,不幸的是,Javascript中的正则表达式不允许与其他正则表达式引擎相同的外观功能。在另一个平台中你可以使用(?< = \(b。)来看看b。
我已经在Javascript中测试了这个脚本,所以它应该可以工作。
或者您也可以使用捕获括号。试试这个代替上面的正则表达式和var birthDate:
var regex = /\(b. ([0-9]+)/;
var birthDate = regex.exec(str)[1];
请记住,exec()应该返回一个数组,因此你需要指定你想要第二个元素([1])。
这也经过了测试。