Tôi có một chút nhầm lẫn về chuỗi thô Python. Tôi biết rằng nếu chúng ta sử dụng chuỗi thô, thì nó sẽ coi '\' là dấu gạch chéo ngược thông thường (ví dụ: r '\ n' sẽ là '\' và 'n'). Tuy nhiên, tôi đã tự hỏi những gì nếu tôi muốn phù hợp với một nhân vật dòng mới trong chuỗi thô. Tôi đã thử r '\ n', nhưng nó không hoạt động. Bất cứ ai có một số ý tưởng tốt về điều này?Làm thế nào để phù hợp với một ký tự dòng mới trong chuỗi thô Python
Trả lời
Trong một biểu thức chính quy, bạn cần phải xác định rằng bạn đang ở chế độ multiline:
>>> import re
>>> s = """cat
... dog"""
>>>
>>> re.match(r'cat\ndog',s,re.M)
<_sre.SRE_Match object at 0xcb7c8>
ý rằng re
dịch các (string thô) \n
thành xuống dòng. Như bạn đã nêu trong bình luận của bạn, bạn không thực sự cần re.M
cho nó để phù hợp, nhưng nó giúp phù hợp với $
và ^
bằng trực giác hơn:
>> re.match(r'^cat\ndog',s).group(0)
'cat\ndog'
>>> re.match(r'^cat$\ndog',s).group(0) #doesn't match
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r'^cat$\ndog',s,re.M).group(0) #matches.
'cat\ndog'
Cảm ơn câu trả lời của bạn @mgilson! Tôi cũng muốn biết lý do tại sao chúng ta cần phải xác định chế độ multiline. Tôi đã thử kết hợp mà không có nó, như thế này "re.match (r'cat \ ndog ', s)" và nó vẫn hoạt động. – wei
@ user1783403 - Bạn chính xác. Tôi nên đọc thêm tài liệu. chỉ định 're.M' lấy'^'và' $ 'để khớp trực quan hơn. – mgilson
Bất kỳ cách nào để nhận '$' để khớp "ít trực giác" - tức là chỉ khớp * * ở cuối chuỗi? Tôi không muốn nó khớp trước khi '\ n' –
Câu trả lời đơn giản nhất là không sử dụng chuỗi thô. Bạn có thể thoát khỏi các dấu gạch chéo ngược bằng cách sử dụng \\
.
Nếu bạn có số lượng lớn các dấu xồ nguợc ở một số phân khúc, sau đó bạn có thể nối dây thô và chuỗi bình thường khi cần thiết:
r"some string \ with \ backslashes" "\n"
(Python tự động móc nối xâu chỉ có khoảng trắng giữa chúng.)
Hãy nhớ rằng nếu bạn đang làm việc với các đường dẫn trên Windows, tùy chọn dễ nhất là chỉ sử dụng các dấu gạch chéo ở phía trước - nó sẽ vẫn hoạt động tốt.
@mgilson Tôi chỉ kiểm tra xem nó có hoạt động với chuỗi thô và dây bình thường không, vì nó không phải là thứ tôi đã làm. Đã chỉnh sửa như vậy. Nó thực sự tốt hơn một chút khi tôi tin rằng việc ghép nối được thực hiện tại thời gian phân tích cú pháp, thay vì khi nó được thực thi. –
Vâng, tôi chưa bao giờ thực sự kiểm tra trước đây :) :) – mgilson
Tại sao -1 về điều này? –
def clean_with_puncutation(text):
from string import punctuation
import re
punctuation_token={p:'<PUNC_'+p+'>' for p in punctuation}
punctuation_token['<br/>']="<TOKEN_BL>"
punctuation_token['\n']="<TOKEN_NL>"
punctuation_token['<EOF>']='<TOKEN_EOF>'
punctuation_token['<SOF>']='<TOKEN_SOF>'
#punctuation_token
regex = r"(<br/>)|(<EOF>)|(<SOF>)|[\n\!\@\#\$\%\^\&\*\(\)\[\]\
{\}\;\:\,\.\/\?\|\`\_\\+\\\=\~\-\<\>]"
###Always put new sequence token at front to avoid overlapping results
#text = '<EOF>[email protected]#$%^&*()[]{};:,./<>?\|`~-= _+\<br/>\n <SOF>\ '
text_=""
matches = re.finditer(regex, text)
index=0
for match in matches:
#print(match.group())
#print(punctuation_token[match.group()])
#print ("Match at index: %s, %s" % (match.start(), match.end()))
text_=text_+ text[index:match.start()] +" "
+punctuation_token[match.group()]+ " "
index=match.end()
return text_
- 1. Làm thế nào để thay thế một ký tự bằng một dòng mới trong Emacs?
- 2. Trong Eclipse, làm thế nào để thay thế một ký tự bằng một dòng mới?
- 3. Làm thế nào để sử dụng ký tự dòng mới trong vòng một ToolTip
- 4. Trong Python, làm cách nào để tạo chuỗi ký tự n trong một dòng mã?
- 5. Ký tự đại diện phù hợp với chuỗi trong tìm kiếm regex Python
- 6. ANTLR phù hợp với bất kỳ ký tự trừ
- 7. Thay thế một ký tự của một chuỗi trong python
- 8. Làm cách nào để bao gồm ký tự dòng mới trong chuỗi trong Delphi?
- 9. Làm thế nào để cắt bớt một chuỗi để phù hợp trong một container?
- 10. C++: Làm thế nào để lặp qua một văn bản trong một std :: chuỗi dòng phù hợp với STL?
- 11. Python regex để phù hợp với chuỗi thoát VT100
- 12. Có mô-đun Python để phân tích ký hiệu ngắt dòng trong chuỗi thô không?
- 13. Regex phù hợp với một (\ n) xuống dòng trong C#
- 14. Làm thế nào để phù hợp với một chuỗi dài thành một JLabel
- 15. python: làm thế nào để chuyển đổi chuỗi chữ thành chuỗi ký tự nguyên?
- 16. Làm thế nào để sử dụng regex với các ký tự tùy chọn trong python?
- 17. Regex để hạn chế chiều dài chuỗi cho các chuỗi với ký tự dòng mới
- 18. Regular Expression với ký tự đại diện để phù hợp với bất kỳ ký tự
- 19. Làm thế nào để có được ký tự ° trong một chuỗi trong python?
- 20. vba regex: dấu chấm phù hợp với dòng mới
- 21. Phát hiện một ký tự dòng mới
- 22. Regex: làm thế nào để phù hợp với dấu chấm cuối cùng trong một chuỗi
- 23. Làm thế nào để tạo một mảng từ một chuỗi bằng dòng mới trong JavaScript?
- 24. Viết một chuỗi (với các dòng mới) bằng Python
- 25. Làm thế nào để khử trùng hoàn toàn một chuỗi ký tự không hợp lệ trong python?
- 26. Làm thế nào để đọc lại và in văn bản với dòng mới từ một chuỗi Python (Django) với HTML?
- 27. Làm thế nào để đọc cin với khoảng trắng cho đến khi một ký tự dòng mới?
- 28. Làm cách nào để viết ký tự dòng mới vào bộ mô tả tệp bằng Python?
- 29. Làm thế nào để xóa tất cả các ký tự sau một ký tự trong chuỗi?
- 30. Làm thế nào để xóa một ký tự khỏi chuỗi bằng python?
Những loại trận đấu chúng ta đang nói về đây? Bạn đang nói về một biểu thức chính quy, hoặc đơn giản là 'if ... trong my_raw_string'? – mgilson
Xin lỗi vì đã làm bạn bối rối. Tôi đang nói về một biểu thức chính quy. – wei